Python Dask工人不在100%

Python Dask工人不在100%,python,asynchronous,parallel-processing,distributed,dask,Python,Asynchronous,Parallel Processing,Distributed,Dask,在由8台机器组成的集群上运行分布式Dask时,每台机器都有8个核心(总共64个核心),我得到了一个奇怪的任务流: 任务之间有一些空白(白色“列”),似乎是随机出现的。理想情况下(据我所知),工作人员必须总是被一些挂起的任务所占据(只要工作人员有空,就会为其分配任务)。这是我的脚本的主循环,它生成前一个图形: task_pool = as_completed(futures, with_results=True) batches = task_pool.batches() while not

在由8台机器组成的集群上运行分布式Dask时,每台机器都有8个核心(总共64个核心),我得到了一个奇怪的任务流:

任务之间有一些空白(白色“列”),似乎是随机出现的。理想情况下(据我所知),工作人员必须总是被一些挂起的任务所占据(只要工作人员有空,就会为其分配任务)。这是我的脚本的主循环,它生成前一个图形:

task_pool = as_completed(futures, with_results=True)
batches = task_pool.batches()

while not self.stopping_condition_is_met():
    batch = next(batches)
    for _, received_solution in batch:
        ...
        new_task = self.client.submit(heavy_computation, args)
        task_pool.add(new_task)

        update_condition()
        if self.stopping_condition_is_met():
            break

我注意到在这段时间里,我有1-2个处理任务和100-120个记忆任务,它们突然变成30-40和80-100。为什么会发生这种情况?

很难说清楚,但我的猜测是,没有足够的工作让所有的员工一直忙个不停。理想情况下,您将能够保持比工作线程多得多的任务处于活动状态。如果只有1-2个处理任务,那么一次只能激活1-2个线程。即使您有30个活动集群,您也只使用了集群的一半

也许有什么方法可以让你把工作分成更多的部分,或者让更多的工作可以做