我编写了一个简单的脚本,该脚本对一系列文件执行系统命令。
为了加快速度,我想并行运行它们,但不是一次全部运行-我需要控制同时运行的命令的最大数量。
最简单的方法是谁?
最佳答案
无论如何,如果您正在调用子进程,则看不到需要使用线程池。使用subprocess
模块的基本实现是
import subprocess
import os
import time
files = <list of file names>
command = "/bin/touch"
processes = set()
max_processes = 5
for name in files:
processes.add(subprocess.Popen([command, name]))
if len(processes) >= max_processes:
os.wait()
processes.difference_update([
p for p in processes if p.poll() is not None])
在Windows上,
os.wait()
不可用(也没有其他任何等待子进程终止的方法)。您可以通过按一定间隔进行轮询来解决此问题:for name in files:
processes.add(subprocess.Popen([command, name]))
while len(processes) >= max_processes:
time.sleep(.1)
processes.difference_update([
p for p in processes if p.poll() is not None])
sleep 时间取决于子流程的预期执行时间。
关于python - 在Python中并行运行几个系统命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4992400/