Как сделать dworkers для многопроцессорности?

Я работаю над распределенными кластерными вычислениями. Чтобы реализовать такую ​​систему, я пытаюсь использовать библиотеки python, которые являются dask.distriuted. Но есть проблема, заключающаяся в том, что dworkers не предназначены для многопроцессорности, то есть 2 или 3 dworkers работают вместе, но не поддерживают несколько исполнений, которые поддерживаются в многопроцессорной библиотеке.

для примера:

def testFun():
 while True:
  time.sleep(3)
  print('looping')

Если я выполню эту функцию в client.submit(testFun). Она будет выполнять эту функцию бесконечное количество раз, тогда она никогда не перейдет к следующим шагам. Нравится для этой программы:

client.submit(testFun)
client.submit(testFun)

Здесь, пока не выполнится первая строка, она никогда не перейдет к следующей строке. Я хочу сделать этот dworker для многопроцессорной обработки. Как я это сделаю?


person Saikat Kundu    schedule 08.12.2016    source источник


Ответы (1)


Это потому, что функция имеет одинаковую сигнатуру и запускается только один раз.

Вы можете сказать по сгенерированному ключу. Видеть:

In [5]: client.submit(testFun)
<Future: status: pending, key: testFun-a4102f4653c498f9fafc90003d87bd08>

In [6]: client.submit(testFun)
<Future: status: pending, key: testFun-a4102f4653c498f9fafc90003d87bd08>

Попробуй это

def testFun(x):
    while True:
        time.sleep(3)
        print('looping', x)
In [13]: client.submit(testFun, 1)
<Future: status: pending, key: testFun-afa640a088a357e5f8dd46c1937af3a7>

In [14]: client.submit(testFun, 2)
<Future: status: pending, key: testFun-98309530cb5b26d69131e54a521b8b40>
person R. Max    schedule 16.12.2016
comment
спасибо теперь работает. Можете ли вы сказать мне, какой параметр вы передаете в функцию отправки, один из них — имя функции, а другой — ?? - person Saikat Kundu; 19.12.2016
comment
@SaikatKundu дополнительный аргумент передается testFun. Это делает две подписи задач (имя функции + аргументы) разными. - person R. Max; 20.12.2016