dask 分布式是否使用 Tornado 协程来执行工作任务?

duk*_*ody 5 python multithreading tornado coroutine dask

distributed我在 dask文档中读到:

Worker 和 Scheduler 节点同时运行。它们服务多个重叠请求并同时执行多个重叠计算而不会阻塞。

我一直认为单线程并发编程最适合 I/O 昂贵的任务,而不是 CPU 密集的任务。然而,我预计许多 dask 任务(例如dask.pandasdask.array)是 CPU 密集型的。

分布式是否仅使用 Tornado 进行客户端/服务器通信,并使用单独的进程/线程来运行 dask 任务?实际上dask-worker--nprocs--nthreads争论,所以我希望情况如此。

Tornado 协程和处理每个 dask 任务的更常见进程/线程的并发如何以分布式方式共存?

MRo*_*lin 4

你是对的。

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

一般来说,该解决方案允许计算与通信和管理分开进行。这允许工作人员内部进行并行计算,并允许工作人员即使在计算任务时也可以响应服务器请求。

命令行选项

当您拨打以下电话时:

dask-worker --nprocs N --nthreads T
Run Code Online (Sandbox Code Playgroud)

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