J'ai un problème avec la création de programme parallèle en utilisant le multitraitement. AFAIK quand je commence un nouveau processus en utilisant ce module (multitraitement) je devrais faire "os.wait()" ou "childProcess.join()" pour obtenir son statut de sortie. Mais placer les fonctions ci-dessus dans mon programme peut se produire en arrêtant le processus principal si quelque chose arrive au processus fils (et le processus fils va se bloquer). Le problème est que si je ne fais pas cela, j'obtiendrai des processus fils zombies (et sera listé comme quelque chose comme "python < défunt" dans le top listing). Y at-il un moyen d'éviter d'attendre la fin des processus fils et d'éviter de créer des processus zombies et/ou de ne pas trop déranger le processus principal à propos de ses processus fils?Programmation parallèle utilisant le multiprocesseur de python et le processus defunc
Répondre
Vous devrez peut-être fournir plus d'informations ou le code actuel pour comprendre cela. Avez-vous traversé le documentation, en particulier les sections intitulées "Avertissement"? Par exemple, vous pouvez être confronté à quelque chose comme ceci:
Avertissement: Comme mentionné ci-dessus, si un processus enfant a des articles mis sur une file d'attente (et il n'a pas utilisé JoinableQueue.cancel_join_thread()), alors que le processus ne se termine pas tant que tous les éléments mis en mémoire tampon n'ont pas été vidés dans le tuyau. Cela signifie que si vous tentez de rejoindre ce processus, vous risquez d'obtenir un interblocage, sauf si vous êtes sûr que tous les éléments qui ont été placés dans la file d'attente ont été consommés. De même, si le processus fils n'est pas démoniaque, le processus parent peut se bloquer à la sortie lorsqu'il tente de rejoindre tous ses enfants non démoniaques.
Notez qu'une file d'attente créée à l'aide d'un gestionnaire n'a pas ce problème. Voir les directives de programmation.
Bien que la réponse de ars devrait résoudre vos problèmes immédiats, vous pourriez envisager de regarder céleri: http://ask.github.com/celery/index.html. C'est une approche relativement favorable aux développeurs pour atteindre ces objectifs et plus encore.