Python 连续并行执行



希望构建一个像for line in sys.stdin:一样从stdin运行无限读取循环的python脚本。对于每次迭代,我希望从使用 line 作为输入在后台执行的池中获取一个工作线程。完成其执行或超时的过程打印到 stdout。

我很难找到能够连续工作的工作线程池模块。例如,多进程池模块仅支持等待所有工作人员完成所有任务的join等功能。对于上述规范,我无法提前知道所有任务,需要在后台分配流程的工作。

这将

永远运行。

import sys
from multiprocessing import Pool
pool = Pool()
for line in sys.stdin.readline():
    pool.apply_async(function, args=[line])
def function(line):
    """Process the line in a separate process."""
    print(line)

使用 Poolimap 可能会更容易,但您必须假设工人的最大容量 ( processes=5 ):

import multiprocessing
import sys

def worker(line):
    return "Worker got %r" % (line)

pool = multiprocessing.Pool(processes=5)
for result in pool.imap(worker, sys.stdin):
    print "Result: %r" % (result)

最新更新