下面是情况:我有一个巨大的对象,需要加载到内存中。这么大,如果它被加载两次,它会超出我的机器上的可用内存(不,我不能升级内存)。我也不能把它分成任何小块。为了简单起见,我们只是说对象是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