【问题标题】:Execute and monitor multiple instances of external program in Python在 Python 中执行和监控外部程序的多个实例
【发布时间】:2009-10-26 05:14:49
【问题描述】:
主程序是这样的:
PREPARE PARAMETERS FOR CHILD PROCESSES
subprocess.Popen('python child.py param=example1'.split(' '))
subprocess.Popen('python child.py param=example2'.split(' '))
...
如何使主程序监控它启动的每个子进程实例,如果它没有运行,则使用相应的参数重新启动它。
保持多个子进程实例运行而不是在主进程中实现多线程架构的目的是尽可能多地利用 CPU 和数据库吞吐量。
【问题讨论】:
标签:
python
external-process
【解决方案1】:
保留一个以子进程的.pids 为键的字典,以及将它们重新启动为相应值的命令行。即:
childid = []
for cmdline in cmdlines:
p = subprocess.Popen(cmdline.split())
childid[p.pid] = cmdline
os.wait 将在任何子进程终止时返回:它为您提供子进程的 (pid, exitstatus)。所以只需适当重启并维护childid。即:
while mustcontinue:
pid, exitstat = os.wait()
cmdline = childid.pop(pid)
p = subprocess.Popen(cmdline.split())
childid[p.pid] = cmdline
大概你对这个无限循环何时结束有一些标准,我只是在这里使用mustcontinue 作为这些标准的名称;-)。