限制

Dask.distributed 有其限制。理解这些限制有助于您可靠地创建高效的分布式计算。

性能

  • 中心调度器在每个任务上花费数百微秒。为获得最佳性能,任务持续时间应大于 10-100ms。

  • Dask 无法在单个任务内部并行化。单个任务的大小应适中,以免压垮任何特定的工作器。

  • Dask 以启发式方式将任务分配给工作器。它通常会做出正确的决定,但也确实会发生非最优的情况。

  • 工作器只是 Python 进程,它们继承了 Python 的所有能力和限制。它们不会以任何方式限制自己。在生产环境中,您可能希望在容器中运行 Dask 工作器。

关于函数和数据的假设

Dask 对您的函数和数据做出以下假设

  • 所有函数都必须可以使用 pickle 或 cloudpickle 进行序列化。这在绝大多数情况下都是如此,除了一些相当特殊的情况。以下情况应该可以正常工作

    from cloudpickle import dumps, loads
    loads(dumps(my_object))
    
  • 所有数据都必须可以使用 pickle、cloudpickle 或 Dask 的自定义序列化系统进行序列化。

  • Dask 可能会多次运行您的函数,例如当持有中间结果的工作器发生故障时。任何副作用都应该是幂等的

安全性

作为一个分布式计算框架,Dask 支持远程执行任意代码。您应该只在您信任的网络中托管 Dask 工作器。这是分布式计算框架的标准做法,但值得重复强调。