2013-02-11 100 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