dask分布式使用Tornado协程来完成工作任务吗?

时间:2016-10-04 21:02:28

标签: python multithreading tornado coroutine dask

我已经在dask distributed documentation读到了:

  

Worker和Scheduler节点同时运行。他们服务几个   重叠请求并执行几个重叠计算   同时没有阻止。

我一直认为单线程并发编程最适合I / O昂贵,而不是CPU绑定的工作。但是我希望许多dask任务(例如dask.pandasdask.array)都是CPU密集型的。

Distributed是否只使用Tornado进行客户端/服务器通信,使用单独的进程/线程来运行dask任务?实际上dask-worker--nprocs--nthreads个参数,所以我希望情况就是这样。

与Tornado协同程序的并发性以及处理每个dask任务的更常见进程/线程如何在分布式中共存?

1 个答案:

答案 0 :(得分:2)

你是对的。

每个distributed.Worker对象包含一个包含多个线程的concurrent.futures.ThreadPoolExecutor。任务在此ThreadPoolExecutor上运行,以实现并行性能。所有通信和协调任务均由Tornado IOLoop管理。

通常,此解决方案允许计算与通信和管理分开进行。这允许在工作者中进行并行计算,并允许工作人员在计算任务时响应服务器请求。

命令行选项

当您拨打以下电话时:

dask-worker --nprocs N --nthreads T

它在单独的Python进程中启动N个单独的distributed.Worker个对象。这些worker中的每一个都有一个带有T个线程的ThreadPoolExecutor。