我编写了一个简单的脚本,该脚本对一系列文件执行系统命令。
为了加快速度,我想并行运行它们,但不是一次全部运行-我需要控制同时运行的命令的最大数量。
最简单的方法是谁?

最佳答案

无论如何,如果您正在调用子进程,则看不到需要使用线程池。使用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/

10-11 06:17