我注意到,由两个工作线程进行分布式运行时,每个工作线程仅使用一个核心。
以下脚本为例,大约需要 20 秒才能获取 times2
,需要 5 秒才能获取 times
。
这意味着每个工作线程使用单个核心执行 4 个任务,而不是使用所有 4 个核心并行执行。我还确认,通过资源监视器,每个工作线程仅使用一个核心。
为什么分布式工作线程只使用一个核心而不是并行执行任务?
最佳答案
因为您的函数是纯 Python,所以它可能受 GIL 约束。我建议更改您的工作人员,以便他们使用多个进程而不是多个线程。例如,如果运行 dask-worker 进程的计算机有四个核心,那么您可以按如下方式启动 dask-worker 进程:
dask-worker scheduler-address:8786 --nprocs 4 --nthreads 1
关于python - 任务完成时间比预期要长得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42458768/