有谁可以告诉我为什么以下不会产生任何输出?
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。
答案 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