2015-02-24 1 views
2

Est-il possible d'utiliser l'intégration python de dmtcp pour vérifier un processus fils en exécution parallèle?python, multiprocessing et dmtcp: le point de contrôle d'un processus dans Pool?

Ma situation est la suivante: J'ai un multiprocessing.Pool avec plusieurs travailleurs recevant des travaux asynchrones (en utilisant apply_async). Certains travaux big nécessitent toutes les ressources (cpu cores & mémoire). Lorsque l'un de ces travaux est accepté, j'aimerais vérifier tous les processus en attente, les expulser, lancer le gros travail et enfin reprendre les processus en point de reprise.

Répondre

0

Si vous démarrez votre programme python en utilisant dmtcp_launch python ... ou dmtcp_launch ./myapp.py, tous les processus enfants créés par le processus principal sont automatiquement sous contrôle de point de contrôle. Ainsi, lorsque vous essayez de vérifier le calcul à partir de votre processus principal, tous les autres processus sont également vérifiés.

Je ne connais pas trop multiprocessing.Pool pour faire des commentaires détaillés sur ce front, mais d'après ce que j'ai compris dans une minute rapide, vous ne voulez pas vérifier votre processus principal (scheduler). Cependant, DMTCP redémarrera le calcul entier (y compris le planificateur) en tant qu'unité unique. Est-ce acceptable? Si ce n'est pas le cas, l'alternative est de ne pas lancer le planificateur sous le contrôle DMTCP, mais de le modifier pour lancer uniquement les processus enfant/esclave sous le contrôle du point de contrôle. Je ne suis pas sûr si c'est quelque chose que vous pouvez faire dans votre application.

+0

Merci beaucoup pour votre réponse, je vois votre point. La plupart des tâches peuvent être exécutées sous le contrôle des points de contrôle, alors je vais essayer d'y aller d'abord. –