Question

Le programme principal est comme ceci:

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

Comment créer un programme principal pour surveiller chaque instance de processus enfant lancé et le redémarrer avec les paramètres correspondants s'il n'est pas en cours d'exécution.

Pour que plusieurs instances du processus enfant continuent de fonctionner au lieu d'implémenter un architecte multi-thread au sein du processus principal, vous devez utiliser autant de débits de processeur et de base de données que possible.

Était-ce utile?

La solution

Conservez un dict avec les .pid s des processus enfants en tant que clés et les lignes de commande pour les redémarrer en tant que valeurs correspondantes. c'est-à-dire:

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

os.wait sera renvoyé à chaque fois tout processus enfant se termine: il vous donne (pid, exitstatus) de l'enfant. Il suffit donc de redémarrer correctement et de maintenir childid . c'est-à-dire:

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

Vous avez probablement des critères pour le moment où cette boucle infinie se termine, je viens d'utiliser mustcontinue comme nom pour ces critères ici; -).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top