我已经在dask distributed
documentation读到了:
Worker和Scheduler节点同时运行。他们服务几个 重叠请求并执行几个重叠计算 同时没有阻止。
我一直认为单线程并发编程最适合I / O昂贵,而不是CPU绑定的工作。但是我希望许多dask任务(例如dask.pandas
,dask.array
)都是CPU密集型的。
Distributed是否只使用Tornado进行客户端/服务器通信,使用单独的进程/线程来运行dask任务?实际上dask-worker
有--nprocs
和--nthreads
个参数,所以我希望情况就是这样。
与Tornado协同程序的并发性以及处理每个dask任务的更常见进程/线程如何在分布式中共存?
答案 0 :(得分:2)
你是对的。
每个distributed.Worker对象包含一个包含多个线程的concurrent.futures.ThreadPoolExecutor。任务在此ThreadPoolExecutor
上运行,以实现并行性能。所有通信和协调任务均由Tornado IOLoop管理。
通常,此解决方案允许计算与通信和管理分开进行。这允许在工作者中进行并行计算,并允许工作人员在计算任务时响应服务器请求。
当您拨打以下电话时:
dask-worker --nprocs N --nthreads T
它在单独的Python进程中启动N
个单独的distributed.Worker
个对象。这些worker中的每一个都有一个带有T
个线程的ThreadPoolExecutor。