【发布时间】:2020-04-04 03:18:33
【问题描述】:
我第一次尝试在我的 python 代码中实现多处理。我被卡住了,因为我无法让 async_apply 等待其所有进程完成。我想在浏览长长的元素列表时以较小的块处理元素并保存结果。
举个更简单的例子:
import multiprocessing as mp
def fun(x, y):
print("here")
return(x+y)
buffer = []
for val in range(10):
buffer.append(val)
print(f{Added value: {val})
if len(buffer) == 5:
#It is my understanding, this is necessary on Windows
if __name__ == "__main__":
pool = mp.Pool()
res = [pool.apply_async(fun, args = (x,x)) for x in buffer]
res = [r.wait() for r in res]
print(f'Results: {res}')
buffer = []
pool.close()
pool.join()
我希望它能够产生以下输出:
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Here
Here
Here
Here
Here
Results: [0, 2, 4, 6, 8]
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Here
Here
Here
Here
Here
Results: [10, 12, 14, 16, 18]
但是它实际上会产生这个(至少在我的机器上):
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Here
Here
Here
Here
Here
Results: [None, None, None, None, None]
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Added value: 0
Added value: 1
Added value: 2
Added value: 3
Added value: 4
Added value: 5
Added value: 6
Added value: 7
Added value: 8
Added value: 9
Here
Here
Here
Here
Here
Results: [None, None, None, None, None]
非常感谢任何建议。
【问题讨论】:
-
试试
Pool.mapdocs.python.org/3.8/library/… -
如果我使用 map 情况会变得更好(它实际上会输出结果),但循环仍然在后台运行并提供大量额外输出——就像在 OP 中一样。
标签: python multiprocessing python-multiprocessing