20

我正在尝试掌握 python 的多处理模块,特别是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()

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

4

3 回答 3

26

传递字典中的关键字 args(以及元组中的位置参数):

pool.apply_async(test, (t,), dict(arg2=5))
于 2013-02-11T10:21:24.820 回答
2

原始答案:带有布尔和多个参数的python多处理

apply_async 具有 args 和 kwds 关键字参数,您可以像这样使用它们:

res = p.apply_async(testFunc, args=(2, 4), kwds={'calcY': False})
于 2021-04-11T15:32:10.560 回答
1

Janne 的回答在 python 2.7.11 中对我不起作用(不知道为什么)。函数 test() 接收的是键 (arg2),而不是值 (5)。

我通过在测试周围创建一个包装器来解决这个问题:

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

然后打电话

pool.apply_async(test2, (t,), [dict(arg2=5)])
于 2016-05-23T20:45:13.337 回答