Python zeromq — Mehrere Verlage Zu einem Einzigen Abonnenten?
Ich würde gerne schreiben ein python
Skript (nennen wir es Eltern), die Folgendes macht:
(1) definiert eine multi-dimensionale numpy
array
(2) forks
10 verschiedene python
Skripte (nennen wir Sie Kinder). Jeder von Ihnen muss in der Lage sein, um read
den Inhalt der numpy
array von (1) an jedem beliebigen Punkt in der Zeit (solange Sie am Leben sind).
(3) jeder der Kind Skripte werden es tun, die eigene Arbeit (Kinder teilen NICHT alle Informationen mit jedem anderen)
(4) an jedem beliebigen Punkt in der Zeit, die Eltern Skript muss in der Lage sein, für das annehmen von Nachrichten von allen seinen Kinder. Diese Nachrichten werden analysiert, die von der übergeordneten und Ursache der numpy
array von (1) zu ändern.
Wie gehe ich vor, wenn arbeiten in python
im Linux
Umfeld? Ich dachte, der Verwendung von zeroMQ
und haben die Eltern eine einzelne Abonnenten während der Kinder alle Verlage; macht es Sinn oder gibt es eine bessere Möglichkeit dafür?
Auch, wie kann ich alle Kinder kontinuierlich Lesen den Inhalt der numpy
array definiert wurde, indem die Eltern ?
- Haben Sie sich überlegt über das PUSH/PULL-Modell, wie beschrieben in zguide.zeromq.org/page:all#Divide-and-Conquer? Nur der ventilator und ein Waschbecken sind ein und derselbe Prozess...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
sub
Kanal nicht haben, um das ein zu binden, so können Sie die Abonnenten binden, und jedes der Kinderpub
- Kanäle herstellen können, und schicken Sie Ihre Nachrichten. In diesem speziellen Fall, denke ich, dass diemultiprocessing
Modul ist eine bessere Passform, aber ich dachte, es trug zu erwähnen:Insbesondere die Kern-Messaging-Muster Teil der Dokumentation beschreibt die Tatsache, dass das Muster auf beiden Seiten zu binden (und die anderen schließen).
multiprocessing
Modul. Siehe z.B. emptysqua.re/blog/grok-die-gil-schnell-thread-safe-python für eine gute Erklärung des GIL.Ich denke, es macht mehr Sinn, PUSH - /PULL-sockets, wie Sie ein standard - Ventilator - Arbeitnehmer - Spüle Szenario, mit der Ausnahme, dass der Ventilator und die Waschbecken sind ein und derselbe Prozess.
Überlegen Sie auch, mit dem multiprocessing Modul anstelle von ZeroMQ. Es wird wahrscheinlich ein wenig leichter.
multiprocessing
ist gut-aber kann ich es verwenden, um zu teilennumpy
array? my shared object (idealerweisenumpy
array) wird eine matrix von 20,000,000 x 5 Elemente. Eine regelmäßigelist
wird ein großer Speicher verschwenden.numpy
array für das LESEN unter allen Kinder?In ZeroMQ es kann nur einen Verlag pro port. Nur die (hässlichen) workaround starten, jedes Kind PUB-socket auf einem anderen port und die Eltern hören auf alle diese ports.
aber die pipeline-Muster beschreiben, auf 0MQ, user guide ist ein viel besserer Weg, dies zu tun.