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

标签 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 和数据库吞吐量。

最佳答案

保留一个字典,其中子进程的 .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/

相关文章:

Python正则表达式风格

python - Brew 无法链接 jpeg

python - celery "Received unregistered task of type"

python 两个大文件的校验和验证

python:运行超时进程并捕获stdout、stderr和退出状态

python - 在 python 中更新字典的最快方法

C - 从没有导出函数的外部进程调用函数

python - 如何在后台启动和运行外部脚本?

c# - 如何使用 C# 确定进程是否已在运行?

java - 使用自定义参数运行外部程序