2014-10-28 41 views
0

这是我第一次尝试使用IPython.parallel,请耐心等待。如何将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)) 

的问题,我已经是:

  1. a在循环之外定义,我认为我需要做一些类似“推”的事情,但有点困惑。我需要“拉”后?
  2. 函数需要两个参数,我不知道如何正确传递它们。我尝试了诸如zip(ii,jj)之类的东西,但遇到了一些错误。
  3. 另外,我假设我使用随机库gmpy2不应该影响的事实。它是否正确?我需要为此做特别的事吗?

理想情况下,我想你的帮助,所以这个简单的例子代码运行无错误。

如果您认为在#2发布我失败的尝试会让我知道。我在#1的黑暗中。

回答

0

我发现了两个办法,使这项工作:

一个是push荷兰国际集团的变量核心。没有必要拉它。变量将简单地在每个流程引擎的名称空间中定义。

rc.client[:].push({'a':a}) 
R2 = lview.map(L2, ii, jj) 

另一种方式是作为重新定义L2采取a作为输入,并通过的a的阵列到map功能:

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('import numpy')()手动将模块手动导入引擎名称空间。

或者你还可以按照这个链接 http://ipython.org/ipython-doc/dev/parallel/parallel_multiengine.html#remote-imports

相关问题