主程序是这样的:
PREPARE PARAMETERS FOR CHILD PROCESSES
subprocess.Popen('python child.py param=example1'.split(' '))
subprocess.Popen('python child.py param=example2'.split(' '))
...
如何使主程序监视它启动的子进程的每个实例,并在子进程未运行时使用相应的参数重新启动它。
保持子进程的多个实例运行而不是在主进程中实现多线程架构的目的是利用尽可能多的 CPU 和数据库吞吐量。
最佳答案
保留一个字典,其中子进程的 .pid
作为键,并将重新启动它们的命令行作为相应的值。即:
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
作为这些标准的名称;-)。
关于python - 在Python中执行和监控外部程序的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623192/