怎么办我用python的多池apply_async关键字参数(how do I use key wo

2019-07-19 16:59发布

我试图让与蟒蛇多处理模块,具体的apply_async方法交手Pool 。 我试图打电话与参数和关键字参数的函数。 如果我调用函数不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()

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

Answer 1:

通过在一字典中的关键字ARGS(和在一个元组中的位置参数):

pool.apply_async(test, (t,), dict(arg2=5))


Answer 2:

詹恩的回答并没有在Python 2.7.11为我工作(不知道为什么)。 功能测试()已接收到密钥(ARG2),而不是值(5)。

我解决了这个问题通过创建围绕测试的包装:

def test2(argsDict):
    test(**argsDict)

然后调用

pool.apply_async(test2, (t,), [dict(arg2=5)])


文章来源: how do I use key word arguments with python multiprocessing pool apply_async