python - 如何在共享内存中轻松存储python可用的只读数据结构

标签 python shared-memory wsgi uwsgi

我有一个 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/

相关文章:

python - FancyArrowPatch 到已知大小的标记边缘?

regex - Apache 使用 AliasMatch 与 WSGI 进程一起提供单页应用程序

python - 如何使用 WebOb 构建文件上传 POST HTTP 请求?

android - 模拟器无法连接到 Google App Engine 开发服务器

python - 为什么 Python 中的共享值会创建额外的进程

python - Celery worker 从哪个目录开始

python - 过滤pandas DataFrame

python - 字符串列 Pandas 数据框的中位数

Java 线程 - 内存一致性错误

c++ - 在共享内存 C++ 中实例化对象