我正在尝试了解Python的多处理模块,特别是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()
如何调用函数,使其接受关键字参数?
传递字典中的关键字args(以及元组中的位置参数):
pool.apply_async(test, (t,), dict(arg2=5))
原始答案:具有布尔值和多个参数的python多处理
apply_async有args和kwds关键字参数,您可以这样使用:
res = p.apply_async(testFunc, args=(2, 4), kwds={'calcY': False})
Janne的回答在python 2.7.11中对我不起作用(不确定为什么)。函数test()接收的是键(arg2),而不是值(5)。
我通过创建一个包装测试修复了这个问题:
def test2(argsDict):
test(**argsDict)
然后调用
pool.apply_async(test2, (t,), [dict(arg2=5)])