在Python中执行和监控多个外部程序实例
主程序是这样的:
PREPARE PARAMETERS FOR CHILD PROCESSES
subprocess.Popen('python child.py param=example1'.split(' '))
subprocess.Popen('python child.py param=example2'.split(' '))
...
如何让主程序监控它启动的每个子进程,如果某个子进程没有在运行,就用相应的参数重启它。
保持多个子进程同时运行,而不是在主程序中实现多线程的架构,目的是为了尽可能多地利用CPU和数据库的处理能力。
1 个回答
5
保持一个字典,字典的键是子进程的 .pid
(进程ID),值是重启这些进程的命令行。也就是说:
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
作为这些标准的名字;-).