3
我很新的使用distributed
python库。我有4名工作人员,并且我已经成功地为每个工作人员使用14个内核(在16个可用的内核中)中启动了一些并行运行,从而导致并行运行4 * 14 = 56个任务。Dask分布式 - 如何为每个工作人员运行一个任务,使该任务在工作人员可用的所有核心上运行?
但是,如果我只想在每个工作人员中只进行一项任务,该怎么办。那样的话,我希望一个任务在工作者上并行使用14个内核。
我很新的使用distributed
python库。我有4名工作人员,并且我已经成功地为每个工作人员使用14个内核(在16个可用的内核中)中启动了一些并行运行,从而导致并行运行4 * 14 = 56个任务。Dask分布式 - 如何为每个工作人员运行一个任务,使该任务在工作人员可用的所有核心上运行?
但是,如果我只想在每个工作人员中只进行一项任务,该怎么办。那样的话,我希望一个任务在工作者上并行使用14个内核。
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})