首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python multiprocess.Pool按标准输出顺序显示结果。

python multiprocess.Pool按标准输出顺序显示结果。
EN

Stack Overflow用户
提问于 2015-06-28 12:21:20
回答 2查看 10K关注 0票数 4

在multiprocessing.Pool中,我试图以同样的顺序显示我的指纹。

代码语言:javascript
复制
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函数,将其保存到一个变量中,然后立即打印它们--但我更愿意在它们完成时立即显示它们--而不是当它们全部完成时。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-28 13:16:30

如果一个Pool在工作进程(由操作系统调度)之间分配列表元素,那么您就无法用map保证输出顺序。

最好的方法(使用map)是将输入更改为元组(sequence_number, data)列表,让worker函数返回(sequence_number, result),而不是按sequence_number排序。

如果希望在项目完成后立即开始处理,请使用imapimap_unordered。使用imap将保持与输入可迭代相同的顺序。如果对(sequence_number, result)元组和imap使用相同的技巧,则可以将结果保存在列表中,并在没有间隙的序列中打印出来。

票数 8
EN

Stack Overflow用户

发布于 2017-06-22 15:00:11

澄清- OP正在寻求在一个进程完成后立即获得订单(而不是等待所有进程完成)。Map确实保证了输出顺序--但是您需要等待所有的进程才能完成。

下面是另一个突出强调这一点的讨论-- Another Stack Discussion

下面是经过编辑的代码和结果,对于像我这样的人来说,他们可能已经被搞糊涂了。

代码语言:javascript
复制
from multiprocessing import Pool
import time


def func(arg):
   time.sleep(0.001)
   print("process order: "+str(arg))
   return arg
if __name__=='__main__':
   proc_pool = Pool(4)
   results = proc_pool.map(func, range(30))
   proc_pool.close()
   proc_pool.join()

   for a in results:
      print("output order"+str(a))` 

研究结果如下:

代码语言:javascript
复制
process order: 6
process order: 7
process order: 14

output order0
output order1
output order2
output order3
output order4
output order5
output order6
output order7
output order8
output order9
output order10
output order11
output order12
output order13
output order14
output order15
output order16
output order17
output order18
output order19
output order20
output order21
output order22
output order23
output order24
output order25
output order26
output order27
output order28
output order29
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31099729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档