首页 > 解决方案 > Python批处理子进程,进程不均匀

问题描述

我想将N个子进程作为批处理大小M执行。我在之前的 SO 线程中使用了这段代码作为起点:

Python 子进程批量调用

def chunks(l, n):
  """Yield successive n-sized chunks from l."""
    for i in xrange(0, len(l), n):
        yield l[i:i+n]

for next_batch in chunks(commands, 5):
    # Start the next few subprocesses
    subps = [subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
             for cmd in next_batch]
    # Wait for these to finish
    for subp in subps:
        subp.wait()

但是,我如何处理批次中不需要相同时间来完成的流程(即,不均匀的流程)?这段代码仍然有效,但它会等到一个批次中的所有进程都完成后再执行下一个批次。

有没有办法允许下一批中的进程在旧批次中的某些进程尚未完成时启动?虽然在任何给定时间不超过M的整体批量大小

标签: pythonsubprocessbatch-processing

解决方案


使用队列: https ://docs.python.org/3/library/multiprocessing.html#multiprocessing.Queue

您将要在队列中处理的数据推送到队列中,然后所有工作人员都从队列中拉出并执行您需要的操作。


推荐阅读