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

时间:2017-02-21 15:42:02

标签: ipython jupyter-notebook ipython-parallel

我正在学习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 个答案:

答案 0 :(得分:1)

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

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

我们可以让每个客户端调用异步

是的,您可以使用view.apply_async返回与结果相对应的Future:

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