我正试图掌握pythons多处理模块,特别是Pool
的apply_async方法。我正在尝试使用参数和关键字参数调用函数。如果我在没有kwargs的情况下调用该函数就可以了,但是当我尝试添加一个关键字参数时,我会得到:
TypeError: apply_async() got an unexpected keyword argument 'arg2'
下面是我正在运行的测试代码
#!/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()
如何调用该函数以使其接受关键字参数?
答案 0 :(得分:20)
将关键字args传递给字典(以及元组中的位置参数):
pool.apply_async(test, (t,), dict(arg2=5))
答案 1 :(得分:1)
Janne的答案在python 2.7.11中对我不起作用(不确定原因)。 函数test()接收密钥(arg2),而不是值(5)。
我通过创建测试包装器来解决这个问题:
def test2(argsDict):
test(**argsDict)
然后调用
pool.apply_async(test2, (t,), [dict(arg2=5)])
答案 2 :(得分:1)
原始答案:python multiprocessing with boolean and multiple arguments
apply_async 有 args 和 kwds 关键字参数,你可以这样使用:
res = p.apply_async(testFunc, args=(2, 4), kwds={'calcY': False})