我有一个 python 进程作为 WSGI-apache 服务器。我在每台机器上都运行着这个过程的许多副本。我的进程中大约有 200 兆字节是只读 python 数据。我想将这些数据放在内存映射段中,以便进程可以共享这些数据的单个副本。最好能够附加到这些数据,这样它们就可以成为实际的 python 2.7 数据对象,而不是从 pickle 或 DBM 或 SQLite 之类的东西中解析出来。
有没有人有示例代码或指向已执行此操作的项目的指针以供分享?
最佳答案
This post StackOverflow 上的@modelnine 为这个问题提供了一个非常全面的答案。正如他所提到的,在您的网络服务器中使用线程而不是进程 fork 可以显着减轻这种影响。我 ran into a similar problem trying to share extremely-large NumPy arrays在几年前使用某种类型的共享内存的 CLI Python 进程之间,我们最终使用了 sharedmem 的组合用于在工作人员之间共享数据的 Python 扩展(证明在某些情况下会泄漏内存,但是,它可能是可以修复的)。只读 mmap()
技术可能对您有用,但我不确定如何在纯 python 中执行此操作(NumPy 解释了内存映射技术 here )。我从来没有找到这个问题的任何明确和简单的答案,但希望这可以为您指明一些新的方向。让我们知道您最终做了什么!
关于python - 如何在共享内存中轻松存储python可用的只读数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28570438/