我在多重处理模型上遇到麻烦。 当使用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()
答案 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