如何在Python multiprocessing pool中使用关键字参数apply_async
我正在学习Python的多进程模块,特别是Pool
的apply_async方法。我想调用一个带有参数和关键字参数的函数。如果我只用普通参数调用这个函数是没问题的,但当我尝试添加一个关键字参数时,就出现了这个错误: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()
我该如何调用这个函数,让它能接受关键字参数呢?
3 个回答
1
Janne的回答在我用Python 2.7.11的时候没用(我也不太清楚为什么)。
这个test()函数接收到的是键(arg2),而不是值(5)。
我通过在test周围加了一个包装函数来解决这个问题:
def test2(argsDict):
test(**argsDict)
然后调用
pool.apply_async(test2, (t,), [dict(arg2=5)])
4
原始回答:使用布尔值和多个参数的Python多进程
apply_async有两个关键字参数,分别是args和kwds,你可以这样使用:
res = p.apply_async(testFunc, args=(2, 4), kwds={'calcY': False})
28
把关键字参数放在一个字典里(把位置参数放在一个元组里):
pool.apply_async(test, (t,), dict(arg2=5))