2017-07-12 47 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}) 
相關問題