2014-10-28 40 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

相關問題