2010-05-10 12 views
1

J'essaie de trouver une bonne et simple méthode pour signaler les processus enfants (créé via SocketServer avec ForkingMixIn) du processus parent .Comment "signaler" les processus enfants intéressés (sans signaux)?

Bien que les signaux Unix pourraient être utilisés, je veux les éviter puisque seuls enfants qui sont intéressés devraient recevoir le signal, et ce serait surpuissant et compliqué d'exiger une sorte d'enregistrement mécanisme pour identifier au processus parent qui est intéressé.

(S'il vous plaît ne pas suggérer les discussions, car ce programme ne fonctionnera pas avec des fils, et a donc d'utiliser des fourches.)

Répondre

3

Puisque vous êtes sur un système Unix, les sémaphores devraient être la réponse facile. Malheureusement, Python ne semble pas offrir un moyen d'appeler l'appel système semop. Si vous utilisez python 2.6, vous pouvez utiliser la classe de conditions multiprocessing module.

2

Je suis venu avec l'idée d'utiliser un descripteur de fichier de tuyau le parent pourrait écrire et lire/flush en combinaison avec select, mais cela ne peut pas vraiment être considéré comme un design très élégant.

De façon plus détaillée: Le parent créerait un tuyau, les sous-processus hériteraient, le processus parent écrirait à la conduite, ce qui se réveiller tout subprocess select(): ing sur le descripteur de fichier, mais le parent serait alors lire immédiatement à partir de l'extrémité de lecture du tuyau et le vider - le seul effet étant que les processus enfants qui étaient select(): sur le tuyau se sont éveillés. Comme je l'ai dit, cela semble étrange et moche, mais je n'ai rien trouvé de vraiment mieux pour le moment.

Edit:

Il se trouve que cela ne fonctionne pas - certains processus enfants sont réveillés et certains ne sont pas. J'ai eu recours à un Condition du module multiprocessing.