我第一次尝试在我的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
任何建议真的非常感谢。
qq_笑_17
德玛西亚99
随时随地看视频慕课网APP
相关分类