这是我第一次尝试使用IPython.parallel
,所以请耐心等待。
我读了这个问题 Parfor for Python 并且无法实现如下的简单示例:
import gmpy2 as gm
import numpy as np
from IPython.parallel import Client
rc = Client()
lview = rc.load_balanced_view()
lview.block = True
a = 1
def L2(ii,jj):
out = []
out.append(gm.fac(ii+jj+a))
return out
Nloop = 100
ii = range(Nloop)
jj = range(Nloop)
R2 = lview.map(L2, zip(ii, jj))
我遇到的问题是:
a
是在循环之外定义的,我认为我需要做类似" push"但是我有点困惑。我是否需要"拉"后?zip(ii,jj)
之类的内容,但遇到了一些错误。gmpy2
不应该影响事情。它是否正确?我需要为此做些什么特别的事吗?理想情况下,我希望得到您的帮助,所以在这个简单的示例中,代码无错运行。
如果你认为发布我在#2失败的尝试是有益的,请告诉我。我和#1在黑暗中。
答案 0 :(得分:0)
我发现了两种方法可以使这项工作:
一个是push
变量到核心。没有必要拉它。该变量将简单地定义在每个流程引擎的命名空间中。
rc.client[:].push({'a':a})
R2 = lview.map(L2, ii, jj)
另一种方法是重新定义L2
以a
作为输入,并将a
数组传递给map
函数:< / p>
def L2(ii,jj,a):
out = []
out.append(gm.fac(ii+jj+a))
return out
R2 = lview.map(L2, ii, jj, [a]*Nloop)
关于本网站的进口情况: http://ipython.org/ipython-doc/dev/parallel/parallel_multiengine.html#non-blocking-execution 您只需在函数中导入所需的库:
注意函数内部的导入。这是一个常见的模型,以确保 在运行任务的地方导入适当的模块。您 也可以通过手动将模块导入引擎名称空间 view.execute(&#39; import numpy&#39;)()。
或者您可以按照此链接进行操作 http://ipython.org/ipython-doc/dev/parallel/parallel_multiengine.html#remote-imports