2

主程序是这样的:

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

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

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

4

1 回答 1

5

保留一个 dict,.pid其中子进程的 s 作为键,命令行重新启动它们作为相应的值。IE:

childid = []
for cmdline in cmdlines:
  p = subprocess.Popen(cmdline.split())
  childid[p.pid] = cmdline

os.wait将在任何子进程终止时返回:它为您提供子进程的 (pid, exitstatus)。所以只需适当重启并维护childid. IE:

while mustcontinue:
  pid, exitstat = os.wait()
  cmdline = childid.pop(pid)
  p = subprocess.Popen(cmdline.split())
  childid[p.pid] = cmdline

大概你对这个无限循环何时结束有一些标准,我只是mustcontinue在这里用作这些标准的名称;-)。

于 2009-10-26T05:28:06.690 回答