如何在python多处理池apply_async中使用关键字参数

时间:2013-02-11 10:14:11

标签: python multiprocessing threadpool

我正试图掌握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()

如何调用该函数以使其接受关键​​字参数?

3 个答案:

答案 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})