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

2 投票
1 回答
2173 浏览
提问于 2025-04-15 15:22

主程序是这样的:

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

撰写回答