限制
内容
限制¶
Dask.distributed 有其局限性。理解这些可以帮助你可靠地创建高效的分布式计算。
性能¶
中央调度器在每个任务上花费几百微秒。为了获得最佳性能,任务持续时间应大于10-100毫秒。
Dask 不能在单个任务中进行并行化。单个任务的大小应适中,以免压垮任何特定的工作者。
Dask 根据启发式方法将任务分配给工作节点。它 通常 会做出正确的决定,但非最优情况确实会发生。
这些工作进程只是 Python 进程,继承了 Python 的所有功能和限制。它们在任何方面都不会自我限制。在生产环境中,您可能希望在容器中运行 Dask 工作进程。
关于函数和数据的假设¶
Dask 对您的函数和数据做了以下假设:
所有函数必须能够通过 pickle 或 cloudpickle 进行序列化。除了在相当特殊的情况下,这通常是可行的。以下应该可以工作:
from cloudpickle import dumps, loads loads(dumps(my_object))
所有数据必须能够通过 pickle、cloudpickle 或使用 Dask 的自定义序列化系统进行序列化。
Dask 可能会多次运行您的函数,例如如果持有中间结果的 worker 死亡。任何副作用都应该是 幂等的。
安全¶
作为一个分布式计算框架,Dask 支持远程执行任意代码。您应该只在您信任的网络中托管 Dask 工作节点。这是分布式计算框架中的标准做法,但值得再次强调。