下面是情況:我有一個巨大的對象,需要加載到內存中。這麼大,如果它被加載兩次,它會超出我的機器上的可用內存(不,我不能升級內存)。我也不能把它分成任何小塊。爲了簡單起見,我們只是說對象是600 MB,而我只有1 GB的RAM。我需要從一個Web應用程序中使用這個對象,該應用程序運行在多個進程中,並且我不控制它們是如何產生的(第三方負載平衡器是這樣做的),所以我不能僅僅依靠創建對象在一些主線程/進程中,然後產生孩子。這也消除了使用像POSH這樣的東西的可能性,因爲它依賴於它自己的自定義分叉調用。我也不能使用像SQLite內存數據庫,mmap或posix_ipc,sysv_ipc和shm模塊之類的東西,因爲這些模塊充當內存中的文件,並且這些數據必須是我使用它的對象。使用其中的一種,我必須將它作爲一個文件讀取,然後在每個單獨的進程和BAM中將其轉換爲對象,由於我只是嘗試加載第二個副本,因此會超出機器的內存限制而導致分段錯誤。如何將Python對象存儲在內存中供不同進程使用?
必須有一些方法可以將Python對象存儲在內存中(而不是作爲文件/字符串/序列化/醃製)並讓它可以從任何進程訪問。我只是不知道它是什麼。我已經看遍了所有的StackOverflow和谷歌,找不到答案,所以我希望有人能幫助我。
我不確定你的意思是「因爲那些在內存中充當文件」。共享內存是一塊內存,而不是一個文件。您可以使用該內存來存儲任何內容,包括對象。這在Python中可能不是那麼明顯,但在C中是這樣。這是否必須是一個純Python解決方案,或者你會考慮一個混合的Python/C或Python/C++解決方案來通過C/C++綁定間接訪問對象到共享內存中的對象嗎? –
因爲這些東西在內存中充當文件,所以請參閱http://docs.python.org/library/mmap.html。 –
像Python的Memcached可以提供幫助嗎? – doremi