限制

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 工作节点。这是分布式计算框架中的标准做法,但值得再次强调。