2017-02-21 4 views
1

Я изучаю параллельное вычисление в ipython. Я наткнулся на пример,Передача различных аргументов для параллельных клиентов ipython

from ipyparallel import Client 

rc = Client() 
rc.block = True 
print(rc.ids) 

def mul(a,b): 
    return a*b 

dview = rc[:] 
print(dview.apply(mul, 5, 6)) 
print(rc[0].apply(mul, 5, 5)) 
print(rc[1].apply(mul, 5, 9)) 

В приведенном выше коде, когда dview.apply называется, она проходит один и тот же набор аргументов для всех клиентов. Я научился звонить каждому клиенту отдельно. Но если клиенты должны выполнять задачи с интенсивным использованием данных, есть ли способ передать разные аргументы через dview.apply, поскольку это скорее точка параллельного вычисления.

Если нет другого способа, можем ли мы сделать асинхронный вызов каждого клиента, поэтому задачи будут выполняться параллельно, а не ждать результатов от первого клиента при вызове отдельных клиентов?.

ответ

1

В общем, параллельные вычисления могут быть выражены в виде карт, где вы передаете последовательности аргументов:

dview = rc[:] 
inputs = [6, 5, 9] 
results = dview.map(mul, [5] * len(inputs), inputs) 

мы можем сделать каждый асинхронный клиент вызов,

да, вы можете использовать view.apply_async, чтобы вернуть Будущее, соответствующее результату:

ar = view.apply_async(mul, 5, 6) 
result = ar.get() 
Смежные вопросы