为 ipython 个并行客户端传递不同的参数

passing different arguments for ipython parallel clients

我正在 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 传递不同的参数,因为这是进行并行计算的重点。

如果没有其他办法,我们是否可以让每个客户端异步调用,这样任务将并行完成,而不是在调用单个客户端时等待第一个客户端的结果?。

通常,并行计算可以表示为映射,您可以在其中传递参数序列:

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

can we make each client call asynchronous

是的,可以用view.apply_async来return一个Future对应的结果:

ar = view.apply_async(mul, 5, 6)
result = ar.get()