Python 批子流程,流程不均匀
Python batch of subprocess, with uneven processes
我想以批量大小 M 的形式执行 N 个子进程。
我在之前的 SO 线程中使用了这段代码作为起点:
Python Subprocess Batch Call
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
的整体批量大小
使用队列:
https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Queue
您将要处理的数据推送到队列中,然后所有工作人员都从队列中拉取并执行您需要的操作。
我想以批量大小 M 的形式执行 N 个子进程。 我在之前的 SO 线程中使用了这段代码作为起点:
Python Subprocess Batch Call
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
的整体批量大小使用队列: https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Queue
您将要处理的数据推送到队列中,然后所有工作人员都从队列中拉取并执行您需要的操作。