2013-02-11 103 views
8

我想抓住蟒蛇多重處理模塊,特別是Pool的apply_async方法。我試圖用參數和關鍵字參數來調用一個函數。如果我調用函數不kwargs這很好,但是當我嘗試在關鍵字參數加上我得到: TypeError: apply_async() got an unexpected keyword argument 'arg2' 下面是我跑我如何使用關鍵字參數與蟒蛇多重處理池apply_async

#!/usr/bin/env python 
import multiprocessing 
from time import sleep 
def test(arg1, arg2=1, arg3=2): 
    sleep(5) 

if __name__ == '__main__': 
    pool = multiprocessing.Pool() 
    for t in range(1000): 
     pool.apply_async(test, t, arg2=5) 
    pool.close() 
    pool.join() 

測試代碼我如何調用該函數使它接受關鍵字參數?

回答

14

傳遞在字典中的關鍵字ARGS(在一個元組中的位置參數):

pool.apply_async(test, (t,), dict(arg2=5)) 
+0

奏效的感謝! – cts 2013-02-11 10:29:02

1

詹恩的回答並沒有爲我在python 2.7.11工作(不知道爲什麼)。 函數test()正在接收密鑰(arg2),而不是值(5)。

我解決了這個問題由各地檢驗創建一個包裝:

def test2(argsDict): 
    test(**argsDict) 

然後調用

pool.apply_async(test2, (t,), [dict(arg2=5)]) 
+0

事情是,如果它是一個包裝,我們不需要關鍵字參數:)我也確認收到密鑰的測試問題 – 2017-05-04 06:41:27