【问题标题】:Does dask distributed use Tornado coroutines for workers tasks?dask 分布式是否使用 Tornado 协程来执行工作任务?
【发布时间】:2017-02-13 04:10:01
【问题描述】:

我在 dask distributed documentation 读到:

Worker 和 Scheduler 节点同时运行。他们提供几个 重叠请求并在 同时没有阻塞。

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

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

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

【问题讨论】:

    标签: python multithreading tornado coroutine dask


    【解决方案1】:

    你是对的。

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

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

    命令行选项

    当您拨打以下电话时:

    dask-worker --nprocs N --nthreads T
    

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

    【讨论】:

    • 谢谢!文档中是否有解释这一点的地方,或者您认为当前的文档可以从有关此的一些额外信息中受益?
    • 目前获取此类信息的最佳位置在这里:distributed.readthedocs.io/en/latest/worker.html 我相信它可以改进。在提供大量技术细节和让普通案例读者可以理解之间取得平衡是很棘手的。我不想立即跳入 Tornado(大多数用户不在乎),但可能是最后的一个部分或 cmets 高雅地洒在整个地方?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多