J'aimerais écrire un script (2) strong> (3) strong> chacun des scripts forts> enfants forts> fera son propre travail ( enfants strong> ne partage aucune information les uns avec les autres) p>
(4) strong> à tout moment de temps, le script parent strong> doit être capable d'accepter des messages de tous ses enfants Comment puis-je aller à ce sujet, lorsque vous travaillez dans Aussi, comment puis-je permettre à tous les enfants forts> forts> de em> lire em> le contenu du tableau code> numpy code> défini par la python code> (appelez-le
numpy code> tableau p>
Fourches code> 10
python code> Les scripts (appelez-les
lire code> le contenu de la matrice code> numpy code> de
Python code> dans un
linux code> environnement? J'ai pensé utiliser
zeromq code> et avoir le parent fort> être un seul em> l'abonné em> tandis que les enfants
3 Réponses :
Je pense qu'il est plus logique d'utiliser des sockets push / pull, car vous avez une standard Ventilateur - Travailleurs - Scénario de l'évier , sauf que le ventilateur et l'évier sont le même processus. P>
Aussi, envisagez d'utiliser le Multiperinging module au lieu de zeromq. Il sera probablement un peu plus facile. P>
TSG, merci pour votre réponse. MultiProcessing Code> est bon - mais puis-je l'utiliser pour partager un tableau code> numpy code>? Mon objet partagé (idéalement,
NUMPY NUMPY code> Array) aura une matrice de 20 000 000 x 5 éléments. Une liste
régulière code> sera une énorme mémoire.
Aussi, comment puis-je partager le tableau Parent B> NUMPY code> pour la lecture entre tous les enfants B>?
à Zeromq, il ne peut y avoir qu'un seul éditeur par port. La seule solution de contournement (laid) consiste à démarrer chaque prise de pub enfant sur un port différent et à écouter les parents sur tous ces ports. p>
Mais le modèle de pipeline décrit sur 0 mq, le Guide de l'utilisateur est un excellent moyen de le faire. P>
Ce n'est pas assez précis. Vous ne pouvez que Bind i> une socket à un port, mais dans ce scénario, il n'y a aucune raison de ne pas se lier avec le sous et connectez tous les pubs à ce port. Zeromq ne se soucie pas du tout des instructions de liaison / Connect.
Le canal code> SUB code> ne doit pas nécessairement être celui à lier, vous pouvez donc avoir la liaison de l'abonné, et chacun des enfants en particulier, le Modèles de messagerie de base La partie de la documentation aborde le fait que les schémas, de chaque côté peuvent se lier (et l'autre connexion). P> p> pub code> peut se connecter à cette et envoyer leurs messages. Dans ce cas particulier, je pense que le module code> multiprocessionnaire code> est un meilleur ajustement, mais je pensais que cela supporterait mentionner:
Je pense que vous voulez dire ... "Le canal de pub n'a pas besoin d'être celui qui se lie"
J'ai copié cela en un script de py et je l'ai couru. Il se bloque simplement sur la commande RECV et n'imprime rien.
C'est probablement parce que vous n'avez pas attendu la connexion à la fin. J'ai ajouté le temps.sleep (0.1) après la connexion et cela a fonctionné.
Travailler pour moi sur un sous-réseau entre les nœuds
Notez que vous n'aurez probablement pas l'expérience d'une excellente performance, car le GIL réduit les chances que vos threads fonctionnent vraiment en parallèle. Comme mentionné ci-dessus, vous pouvez éviter cela en utilisant le module code> multiprocessionnaire code>. Voir par exemple videysqua.re/blog/grok-the-gil-fast -Trread-Safe-Safe-Python Pour une bonne explication de la gil.
Avez-vous envisagé d'utiliser le modèle Push / Pull, comme décrit dans zGuide.zeromq.org / Page: Tout # Divide-et-Conquer ? Seul le ventilateur et le puits sont le même processus ...