在 multiprocessing.Pool 中,我试图以相同的顺序显示我的打印结果。
from multiprocessing import Pool
import time
def func(arg):
time.sleep(0.001)
print(arg, end=" ")
proc_pool = Pool(4)
proc_pool.map(func, range(30))
输出是:0 1 8 9 10 11 14 15 6 7 16 17 4 5 12 13 18 19 2 3
或类似的。它不在顺序中0 1 2 3 ...
我知道imap
可以提供更好的排序...但这仍然不完全是我想要的。我可以重写打印函数将其保存到变量中并立即打印它们 - 但我更喜欢在它们完成后立即显示它们 - 而不是全部完成时显示它们。
鉴于Pool
在工作进程(由操作系统调度)之间分配列表的元素,您无法保证内部处理订单map
.
你可能能做的最好的事情(与map
) 是将输入更改为元组列表(sequence_number, data)
,让工作函数返回(sequence_number, result)
然后排序依据sequence_number
.
如果您想在项目完成后立即开始处理它们,请使用imap
or imap_unordered
. Using imap
将保留与输入可迭代相同的顺序。如果你使用同样的技巧(sequence_number, result)
元组与imap
,您可以将结果保存在列表中,并在获得无间隙序列后打印它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)