Планировщик запущенных процессов в распределенном Dask

Локальная даска позволяет использовать планировщик процессов. Рабочие в распределенном dask используют ThreadPoolExecutor для вычисления задач. Можно ли заменить ThreadPoolExecutor на ProcessPoolExecutor в распределенном dask? Спасибо.


person Vladyslav Moisieienkov    schedule 10.01.2019    source источник


Ответы (1)


Распределенный планировщик позволяет работать с любым количеством процессов с помощью любого из вариантов развертывания. Каждый из них может иметь один или несколько потоков. Таким образом, у вас есть возможность выбирать любимое сочетание потоков и процессов по своему усмотрению.

Самое простое выражение этого - LocalCluster (то же самое, что и Client() по умолчанию):

cluster = LocalCluster(n_workers=W, threads_per_worker=T, processes=True)

делает W рабочих с T потоками каждый (что может быть 1).

В настоящее время реализация воркеров использует пул потоков внутри, и вы не можете поменять местами пул процессов вместо него.

person mdurant    schedule 10.01.2019
comment
Спасибо за Ваш ответ. Итак, при такой настройке мои задачи будут запускаться в пуле процессов, а не в пуле потоков? - person Vladyslav Moisieienkov; 11.01.2019
comment
Просто добавить. Идея состоит в том, чтобы использовать ProcessPoolExecutor вместо ThreadPoolExecutor. - person Vladyslav Moisieienkov; 11.01.2019
comment
Я говорю, вам не нужно беспокоиться об этом. Почему вы хотите изменить такую ​​низкоуровневую деталь реализации? - person mdurant; 11.01.2019
comment
Это связано с stackoverflow.com/questions/54077457/. ProcessPool больше подходит. Но я уже понял, что легко заменить ThreadPool на ProcessPool. - person Vladyslav Moisieienkov; 11.01.2019
comment
ProcessPool больше подходит - правда, я бы не стал с этим связываться. У вас уже есть несколько процессов, это похоже на рецепт каскада. - person mdurant; 11.01.2019
comment
Я согласен с тем, что ProcessPool, как правило, не очень хорошее решение, но для моей цели он мне нужен. Могли бы вы просто добавить к своему ответу, что ThreadPool нельзя заменить на ProcessPool для выполнения задач, я приму ответ, и мы можем закрыть вопрос. Спасибо. - person Vladyslav Moisieienkov; 15.01.2019