2017-07-12 41 views
3

我很新的使用distributed python库。我有4名工作人员,并且我已经成功地为每个工作人员使用14个内核(在16个可用的内核中)中启动了一些并行运行,从而导致并行运行4 * 14 = 56个任务。Dask分布式 - 如何为每个工作人员运行一个任务,使该任务在工作人员可用的所有核心上运行?

但是,如果我只想在每个工作人员中只进行一项任务,该怎么办。那样的话,我希望一个任务在工作者上并行使用14个内核。

回答

2

Dask工作人员维护一个单线程池,用于启动任务。每个任务总是从该池中消耗一个线程。您无法告诉任务从该池中获取多个线程。

但是,还有其他方法可以控制和限制dask工人内的并发。在你的情况下,你可能会考虑定义worker resources。这可以让你阻止许多重大任务在同一时间在同一个员工上运行。

在以下示例中,我们定义每个工作人员有一个Foo资源,并且每个任务需要一个Foo才能运行。这将阻止任何两个任务在同一个worker上同时运行。

dask-worker scheduler-address:8786 --resources Foo=1 
dask-worker scheduler-address:8786 --resources Foo=1 

from dask.distributed import Client 
client = Client('scheduler-address:8786') 
futures = client.map(my_expensive_function, ..., resources={'Foo': 1}) 
相关问题