在Python中执行和监视外部程序的多个实例

时间:2009-10-26 05:14:50

标签: python external-process

主程序是这样的:

PREPARE PARAMETERS FOR CHILD PROCESSES
subprocess.Popen('python child.py param=example1'.split(' '))
subprocess.Popen('python child.py param=example2'.split(' '))
...

如何使主程序监视它启动的子进程的每个实例,如果它没有运行则用相应的参数重新启动它。

保持多个子进程实例运行而不是在主进程中实现多线程架构的目的是尽可能多地利用CPU和数据库吞吐量。

1 个答案:

答案 0 :(得分:5)

使用子进程的.pid作为键保存一个dict,并使用命令行将它们作为相应的值重新启动。即:

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作为这些标准的名称; - )。