繁体   English   中英

如何在内存中存储 Python 对象以供不同进程使用?

[英]How do I store a Python object in memory for use by different processes?

情况是这样的:我有一个巨大的对象需要加载到内存中。 太大了,如果它被加载两次,它将超出我机器上的可用内存(不,我无法升级内存)。 我也不能把它分成任何更小的部分。 为简单起见,我们假设对象为 600 MB,而我只有 1 GB 的 RAM。 我需要从运行在多个进程中的 Web 应用程序中使用此对象,并且我无法控制它们的生成方式(第三方负载均衡器会这样做),因此我不能仅仅依赖于创建对象在一些主线程/进程中,然后产生子进程。 这也消除了使用 POSH 之类的可能性,因为它依赖于它自己的自定义 fork 调用。 我也不能使用 SQLite 内存数据库、mmap 或 posix_ipc、sysv_ipc 和 shm 模块之类的东西,因为它们充当内存中的文件,而这些数据必须是我才能使用的对象。 使用其中之一,我必须将其作为文件读取,然后在每个单独的进程和 BAM 中将其转换为对象,由于我只是尝试加载第二个副本,因此超过机器的内存限制会导致分段错误。

必须有某种方式将 Python 对象存储在内存中(而不是作为文件/字符串/序列化/腌制)并且可以从任何进程访问它。 我只是不知道它是什么。 我已经查看了 StackOverflow 和 Google 的所有内容,但找不到答案,所以我希望有人可以帮助我。

http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes

查找共享内存或服务器进程。 重新阅读您的后服务器进程后,听起来更接近您想要的。

http://en.wikipedia.org/wiki/Shared_memory

必须有某种方式将 Python 对象存储在内存中(而不是作为文件/字符串/序列化/腌制)并且可以从任何进程访问它。

这不是工作的方式。 Python 对象引用计数和对象的内部指针在多个进程中没有意义。

如果数据不必是实际的 Python 对象,您可以尝试处理存储在 mmap() 或数据库中的原始数据等。

我会将其实现为一个 C 模块,该模块被导入到每个 Python 脚本中。 然后这个大对象的接口将用 C 或 C 和 Python 的某种组合来实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM