gpt4 book ai didi

python multiprocess.Pool 在标准输出中按顺序显示结果

转载 作者:太空宇宙 更新时间:2023-11-03 12:46:51 35 4
gpt4 key购买 nike

在 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 可以提供更好的排序...但它仍然不是我想要的。我可以覆盖 print 函数以将其保存到一个变量中并一次打印它们 - 但我更愿意在它们完成时立即显示它们 - 而不是在所有完成时显示它们。

最佳答案

鉴于 Pool 在工作进程(由操作系统调度)之间分发列表的元素,您无法保证内部使用 map 处理顺序。

你可能做的最好的事情(使用 map)是将输入更改为元组列表 (sequence_number, data),让 worker 函数返回 (sequence_number, result) 然后按 sequence_number 排序。

如果您想在项目完成后立即开始处理,请使用 imapimap_unordered。使用 imap 将保留与输入可迭代对象相同的顺序。如果您对 (sequence_number, result) 元组使用与 imap 相同的技巧,您可以将结果保存在一个列表中,并在得到一个没有间隙的序列后打印它们。

关于python multiprocess.Pool 在标准输出中按顺序显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099729/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com