Wie Speichere ich ein Python-Objekt im Speicher für die Verwendung durch andere Prozesse?

Hier ist die situation: ich habe ein massives Objekt, dass muss in den Arbeitsspeicher geladen werden. So groß, dass, wenn es geladen wird zweimal er gehen über den verfügbaren Speicher auf meinem Rechner (und Nein, ich kann nicht aktualisieren, Speicher). Ich auch nicht teilen kann es in jede kleinere Stücke. Der Einfachheit halber, lasst uns einfach sagen, das Objekt ist 600 MB und ich habe nur 1 GB RAM. Ich benötigen, um dieses Objekt aus einem web-app, die ausgeführt wird, in mehreren Prozessen, und ich nicht kontrollieren, wie Sie hervorgebracht (eine Dritte Partei load balancer verfügt, dass), also ich kann mich nicht darauf verlassen, dass nur das erstellen des Objekts in einigen master-thread/Prozess-und dann erzeugen von Kindern. Dies schließt auch die Möglichkeit der Verwendung von so etwas wie POSH, denn das beruht auf eigenen custom fork-Aufruf. Ich kann mir auch nicht so etwas wie eine SQLite-memory-Datenbank, mmap oder die posix_ipc, sysv_ipc und shm-Module, da diese Handlung als eine Datei in den Arbeitsspeicher, und diese Daten werden, um ein Objekt für mich, es zu benutzen. Mit einer von denen würde ich Lesen müssen, um es als Datei und schalten Sie ihn dann in ein Objekt in jedem einzelnen Prozess und BAM, segmentation fault aus gehen über die Maschine und das memory limit, weil ich lediglich versucht, die Last in einen zweiten kopieren.

Muss es irgendwie zum speichern eines Python-Objekts im Speicher (und nicht als Datei/string/serialisiert/gebeizt) und haben es zugänglich von jedem Prozess. Ich weiß nur nicht, was es ist. Ich habe gesucht alle über StackOverflow und Google und kann nicht finden die Antwort auf diese, so hoffe ich, jemand kann mir helfen.

  • Ich bin mir nicht sicher, was Sie meinen ", weil diejenigen, die handeln, als eine Datei in den Arbeitsspeicher". Shared memory ist ein Speicherbereich, nicht eine Datei. Sie können verwenden, dass der Speicher zum speichern von allem, einschließlich einem Objekt. Dies ist möglicherweise nicht so offensichtlich in Python, aber in C ist es. Muss das sein, eine Python-Lösung, oder Sie überlegen, eine hybrid-Python/C-oder Python - /C++ - Lösung für den Zugriff auf das Objekt indirekt über C/C++ - Bindungen für ein Objekt im shared memory?
  • Denn diese Dinge wirken als Dateien im Speicher finden Sie unter docs.python.org/library/mmap.html zum Beispiel.
  • Würde sowas wie Memcached, Python überhaupt helfen?
  • in Python, Sie wirken wie eine Datei (oder einen string). Dies bedeutet, dass ein Python-Programm mit mmap() können nicht Lesen oder schreiben, was aber eine serialisierte version des Objekts. Dies ist der Grund, warum ich erwähnt, dass diese Einschränkung ist nur für bestimmte Python-und, dass eine hybrid-Lösung bieten könnten, die genau die gewünschte Funktionalität.
  • Ich sehe. Ihr Punkt ist, dass er kann, wenn er sagte, er kann nicht, durch einige nicht so offensichtliche Mittel.
  • was ist die Struktur, die großes Objekt? wenn wir wüssten, dass und wie es verwendet wird, könnte es möglich sein, eine Lösung zu finden, um die richtigen problem.
  • Vielen Dank für all die Antworten. Ich verstehe, dass es möglich sein könnte, mit C oder C++ wegen der Art und Weise haben Sie Zugang zum Speicher, aber ich würde es vorziehen, ein all-Python-Lösung, denn die Firma ist ein Python-dev-Haus.
  • Auch, Memcached hat ein limit von 1 MB pro Wert also ist das nicht wirklich eine option.

InformationsquelleAutor Brendan | 2011-12-12
Schreibe einen Kommentar