2014-10-10 24 views
0

我有一個模塊multy.py用的利用多重Python的多:調用模塊與其他腳本多處理與傳遞變量

from multiprocessing import Pool 

def f(x): 
    return x*x 

if __name__ == '__main__': 
    pool = Pool(processes=4) 
    result = pool.apply_async(f, [10]) 
    print result.get(timeout=1) 
    print pool.map(f, range(1000)) 

從另一個腳本start.py的簡單的例子,我想打電話這一點,並針對不同的值執行1000

如何用新參數正確運行它?

我試圖使用導入multy並以傳遞變量作爲os.system('multy.py')運行,但沒有成功。

任何想法?

回答

1

通常,我們使用if __name__ == '__main__'中的代碼進行自我測試。 在你的情況,我建議你寫相關的代碼爲這樣的函數:

from multiprocessing import Pool 

def f(x): 
    return x*x 
def func(num): 
    pool = Pool(processes=4) 
    result = pool.apply_async(f, [10]) 
    print result.get(timeout=1) 
    print pool.map(f, range(num)) 

if __name__ == '__main__': 
    func(1000) 

然後你就可以在另一個文件中導入multy並調用func(yournum)。它會使你的代碼更具可讀性。就像這樣:

test.py:

if __name__ == '__main__': 
    import multy 
    multy.func(2) 
+0

它不能正常工作。調用multy.func(2)後,我收到錯誤。並且執行循環。 – 2014-10-10 09:33:29

+0

@ user3990145檢查我的更新。你必須這樣寫。 – 2014-10-10 13:35:30

+0

'import multy'不需要放在'if __name__ ==「__main __」'guard後面,fwiw。 'multy.func(2)'當然會。 – dano 2014-10-10 14:37:39