Oto sytuacja: Mam ogromny obiekt, który musi zostać załadowany do pamięci. Tak duże, że jeśli zostanie załadowane dwa razy, wykroczy poza dostępną pamięć na moim komputerze (i nie, nie mogę zaktualizować pamięci). Nie mogę też podzielić tego na mniejsze. Dla uproszczenia, powiedzmy, że obiekt ma 600 MB i mam tylko 1 GB pamięci RAM. Muszę użyć tego obiektu z aplikacji sieciowej, która działa w wielu procesach i nie kontroluję tego, jak są one tworzone (równoważenie obciążenia stron trzecich to robi), więc nie mogę polegać tylko na tworzeniu obiektu w jakimś wątku/procesie nadrzędnym, a następnie spawnie dzieci. Eliminuje to również możliwość użycia czegoś takiego jak POSH, ponieważ opiera się on na własnym niestandardowym wywołaniu widelca. Nie mogę też użyć czegoś takiego jak baza danych SQLite, mmap lub posix_ipc, sysv_ipc i shm modules, ponieważ działają one jako plik w pamięci, a dane te muszą być dla mnie obiektem do użycia. Korzystając z jednego z nich, musiałbym odczytać go jako plik, a następnie przekształcić go w obiekt w każdym pojedynczym procesie i BAM, błąd segmentacji od przekroczenia limitu pamięci maszyny, ponieważ właśnie próbowałem załadować drugą kopię.Jak przechowywać obiekt Pythona w pamięci do użycia przez różne procesy?
Musi być gdzieś przechowywany obiekt Pythona w pamięci (a nie jako plik/ciąg/szeregowany/wytrawiony) i musi być dostępny z dowolnego procesu. Po prostu nie wiem, co to jest. Rozglądałem się po StackOverflow i Google i nie mogę znaleźć odpowiedzi na to, więc mam nadzieję, że ktoś może mi pomóc.
Nie jestem pewien, co masz na myśli przez "ponieważ działają jako plik w pamięci". Pamięć współdzielona to pamięć, a nie plik. Możesz użyć tej pamięci do przechowywania czegokolwiek, łącznie z obiektem. To może nie być tak oczywiste w Pythonie, ale w C jest. Czy to musi być rozwiązanie tylko w języku Python, czy też rozważysz hybrydowe rozwiązanie Python/C lub Python/C++, aby uzyskać pośredni dostęp do obiektu poprzez powiązania C/C++ z obiektem we wspólnej pamięci? –
Ponieważ te rzeczy działają jak pliki w pamięci, na przykład http://docs.python.org/library/mmap.html. –
Czy coś takiego jak Memcached dla Pythona mogłoby w ogóle pomóc? – doremi