【发布时间】:2017-04-05 19:23:12
【问题描述】:
我注意到,使用两个 worker 进行分布式运行时,每个 worker 只使用一个核心。
以下面的脚本为例,获取times2 需要大约20 秒,获取times 需要5 秒。
这意味着每个工作人员使用单个内核执行 4 个任务,而不是使用所有 4 个内核并行执行。我还确认使用资源监视器,每个工作人员只使用一个核心。
为什么分布式只使用一个核心作为worker而不是并行执行任务?
【问题讨论】:
标签: python
我注意到,使用两个 worker 进行分布式运行时,每个 worker 只使用一个核心。
以下面的脚本为例,获取times2 需要大约20 秒,获取times 需要5 秒。
这意味着每个工作人员使用单个内核执行 4 个任务,而不是使用所有 4 个内核并行执行。我还确认使用资源监视器,每个工作人员只使用一个核心。
为什么分布式只使用一个核心作为worker而不是并行执行任务?
【问题讨论】:
标签: python
因为您的函数是纯 Python,所以它可能受 GIL 约束。我建议更改您的工作人员,以便他们使用多个进程而不是多个线程。例如,如果您运行 dask-worker 进程的机器有四个内核,那么您可以按如下方式启动 dask-worker 进程:
dask-worker scheduler-address:8786 --nprocs 4 --nthreads 1
【讨论】:
dask-worker scheduler-address:8786 --nprocs 4 --nthreads 8?
--nthreads 应该改名为--threads-per-process