Effiziente Python-Python-IPC
Was wäre ein inter-Prozess-Kommunikation (IPC) framework\Technik mit den folgenden Anforderungen:
- Transfer native Python-Objekte zwischen zwei Python-Prozesse
- Effizient in Zeit-und CPU (RAM-Effizienz irrelevant)
- Cross-Plattform-Win\Linux
- Schön zu haben: funktioniert mit PyPy
UPDATE 1: die Prozesse auf dem gleichen host, und verwenden Sie die gleichen Versionen von Python und sonstigen Module
UPDATE 2: die Prozesse laufen unabhängig vom Benutzer, nicht einer von Ihnen spawns der anderen
InformationsquelleAutor der Frage Jonathan | 2011-10-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Native Objekte nicht geteilt zwischen Prozessen (aufgrund reference counting).
Stattdessen können Sie die Gurke Sie und teilen Sie Sie mit unix-domain-sockets, mmap, zeromq, oder ein Vermittler solch eine sqlite3, der entworfen wird, für gleichzeitige Zugriffe.
InformationsquelleAutor der Antwort Raymond Hettinger
Verwenden multiprocessingum mit zu beginnen.
Wenn Sie mehrere CPU ' s, Blick auf Sellerie.
InformationsquelleAutor der Antwort S.Lott
Beide execnet und Pyro erwähnen
PyPy <-> CPython
Kommunikation. Andere Pakete von Python-Wiki ist Parallelverarbeitung Seite sind wohl geeignet, zu.InformationsquelleAutor der Antwort TryPyPy
Parallel Python könnte einen Blick Wert sein, es funktioniert auf Windows, OS X und Linux (und ich glaube mich zu erinnern das ich es auf einem UltraSPARC Solaris 10 Maschine eine Weile zurück). Ich weiß nicht, ob es funktioniert mit PyPy, aber es scheint zu funktionieren mit Psyco.
InformationsquelleAutor der Antwort ChrisC
Nach einigen test habe ich herausgefunden, dass der folgende Ansatz funktioniert für Linux mit
mmap
.Linux hat
/dev/shm
. Wenn Sie erstellen Sie einen freigegebenen Speicher verwenden POSIXshm_open
wird eine neue Datei in diesem Ordner erstellt.Obwohl python ' s
mmap
Modul nicht dieshm_open
Funktion. wir können mit einem normalenopen
eine Datei zu erstellen, in/dev/shm
und es ist wirklich ähnlich und befinden sich im Speicher. (Verwenden Sieos.unlink
um es zu entfernen)Dann für IPC, wir können
mmap
zum anzeigen dieser Datei, um die verschiedenen Prozesse " virtuellen Speicher. Alle Prozesse teilen, dass der Speicher. Python können die Speicher als Puffer und erstellen von Objekten, wie zum Beispiel bytes und numpy-arrays. Oder wir können es durch diectypes
- Schnittstelle.Natürlich -, Prozess-sync-primitives werden immer noch benötigt, um Wettlaufsituationen zu vermeiden.
Sehen mmap docctypes doc und
numpy.Last
die einemmap_mode
option.InformationsquelleAutor der Antwort Liu Sha