2011-02-02 5 views
2

J'ai de nombreux processus qui sont engendrés séparément, pas de parent à enfant. Les processus doivent envoyer un message aux processus spécifiques. L'adresse de processus de réception (pid) peut être stockée dans une base de données, mais les processus ne peuvent partager aucune variable commune en mémoire. Je ne trouvais aucun moyen d'accomplir cela avec le paquet python multiprocess et je suis maintenant en train de chercher un serveur basé sur socket, mais ce problème me laissait toujours curieux de savoir si ce type d'architecture pouvait être réalisé avec le multiprocessing - l'avantage serait pour passer facilement des objets sélectionnables.Multiprocessing Python avec des processus non liés

Répondre

2

Les processus doivent envoyer un message à des processus spécifiques. L'adresse de processus de réception (pid) peut être stockée dans une base de données, mais les processus ne peuvent partager aucune variable commune en mémoire.

Base de données? Pourquoi? Tout le monde utilise un fichier pour cela, car un fichier est bon marché, disponible, et vous ne stockez qu'une seule valeur entière.

Aussi. Puisque vous allez utiliser un fichier, vous avez des choix plus intéressants. Chaque processus écrit le message dans un canal nommé.

  1. Chaque processus écrit le message dans un canal nommé. Le processus de réception prend les demandes du tube nommé.

  2. Chaque processus écrit le message dans un fichier. Un verrou simple assure qu'un seul processus à la fois a accès au fichier, assurant la sérialisation. Le processus de réception lit à partir de ce fichier.

  3. Chaque processus utilise HTTP pour effectuer une demande RESTful au processus de réception. Le processus de réception utilise un environnement de serveur HTTP simplifié pour traiter les demandes. Chaque processus utilise une file d'attente de messages pour mettre les messages en file d'attente. Le processus de réception supprime les messages. La file d'attente est un fichier.

etc. Et oui, il y en a plus. Mais ils commencent à être spécifiques au système d'exploitation.

Questions connexes