2011-01-28 7 views
4

Je veux créer des processus de travail et s'ils tombent en panne à cause d'une exception, je voudrais qu'ils réapparaissent. Mis à part la méthode is_alive dans le module multitraitement, je n'arrive pas à trouver un moyen de le faire. Cela nécessiterait de parcourir tous les processus en cours (après un sommeil) et de vérifier s'ils sont en vie. C'est essentiellement une boucle occupée, je me demandais s'il y avait une meilleure solution qui réveillera mon programme dans le cas où l'un de mes processus de travail s'est écrasé. Une fois qu'il se réveille, je voudrais enregistrer l'exception qui a planté mon programme et lancer un autre processus.Python Multiprocessing respawn processus écrasés

Répondre

2

L'interrogation pour voir si les processus enfants sont actifs devrait fonctionner correctement, car il s'agit d'une vérification à faible coût et vous n'avez pas besoin de vérifier cela souvent.

La première réponse à cette question (similaire) question a un exemple de code Python: Multi-server monitor/auto restarter in python

1

Vous pouvez envelopper vos processus de travail dans try/sauf blocs où l'exception pousse un message sur un tuyau avant de soulever. Bien sûr, le sondage n'est pas vraiment pire que ça et c'est plus simple.

1

Si vous utilisez un système de type Unix, votre programme principal peut être averti des enfants décédés en installant un signal handler. Recherchez la documentation de votre système d'exploitation sur signal(), en particulier SIGCHLD. Je crains de ne pas me souvenir si Windows couvre SIGCHLD avec son support de signal POSIX très limité.

Questions connexes