带有for循环的多个参数的python多重处理

时间:2019-09-19 07:34:18

标签: python multiprocessing

我在多重处理模型上遇到麻烦。 当使用for循环传递单个参数时,我的代码有效:

def job(a):
    pass

p = Pool()
res = [p.apply_async(job, (a,)) for a in A]
p.close()
p.join()

当使用for循环传递多个参数时,我无法使其正常工作。这可能吗?

def job(a, b, c, d):
    pass

p = Pool()
res = [p.apply_async(job, (a,), (b, c, d) for a in A]  #??
p.close()
p.join()

2 个答案:

答案 0 :(得分:0)

我认为有一种语法。 试试这个:

 res = [p.apply_async(job,(a,b,c,d)) for a in A]

答案 1 :(得分:0)

如何邻接使用multiprocessing.Pool? 它将遍历您的输入,并使用partial可以将更多参数传递给它。 像这样:

import multiprocessing
from functools import partial


def job(a, b, c):
    print("{} - {} - {}".format(a, b, c))

def main():
    iterable = [1, 2, 3, 4, 5, 6]
    pool = multiprocessing.Pool(processes=3)
    func = partial(job, "static arg1", "static arg2")
    pool.map(func, iterable)
    pool.close()
    pool.join()

if __name__ == "__main__":
    main()

输出将是:

static arg1 - static arg2 - 1
static arg1 - static arg2 - 2
static arg1 - static arg2 - 3
static arg1 - static arg2 - 4
static arg1 - static arg2 - 5
static arg1 - static arg2 - 6