用于文件中行的python多进程映射

时间:2015-10-05 04:38:35

标签: python multiprocessing

有谁可以告诉我为什么以下不会产生任何输出?

python mycode.py< file.txt

mycode.py是

import sys, time, multiprocessing
def work(l):
  time.sleep(len(l))    
  print l
  return 0

if __name__ == '__main__':
  p = multiprocessing.Pool(2)
  p.imap_unordered(work, sys.stdin.readlines())

这只是一个测试程序。在现实生活中,&#34;工作&#34;将被计算密集的耗时过程所取代。由于行的顺序无关紧要,我试图使用imap_unordered。

1 个答案:

答案 0 :(得分:2)

p.imap_unordered()是一个迭代器。要推进它,你需要消耗它:

#!/usr/bin/env python
import multiprocessing
import sys
import time

def work(line):
    time.sleep(len(line))
    return line

if __name__ == '__main__':
    pool = multiprocessing.Pool(2)
    for result in pool.imap_unordered(work, sys.stdin):
        sys.stdout.write(result)

如果file.txt包含:

ccc
bb
a

然后输出是:

bb
ccc
a

如果将最大工作人数从2增加到3,则输出为:

a
bb
ccc

要运行它,请在stdin上传递输入:

$ python mycode.py <file.txt

将输出重定向到另一个文件:

$ python mycode.py <file.txt >output.txt