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



我正在尝试了解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)])

相关内容

  • 没有找到相关文章

最新更新