Pri*_*ate 5 python django shared-memory uwsgi
有没有人有一个最小的工作示例,说明如何使用uWSGI在Django中的请求之间共享内存?
我有一个专有格式的大文件(与数据库不兼容),需要为每个请求加载。
一条instagram帖子让我思考以下内容:
对于应用程序服务器,我们将uWSGI与前叉模式结合使用,以利用主进程与工作进程之间的内存共享。
您将如何设置类似的内容?
有多种方法可以处理这个问题:
如果您的数据是只读的,您可以利用 uWSGI 正在执行 python 代码的事实来将applicationbefore fork 分为多个进程。这意味着在分叉发生之前已经加载的所有数据将与所有进程共享。
这可能是一个很棒的工具,因为您无需执行任何处理多处理的操作即可享受此机制。但要小心,一旦任何进程写入此数据,它就会首先复制它以获取自己的本地版本。
Django 并不容易,因为所有视图都是惰性的。application这意味着 django 在创建视图时不会尝试运行与视图相关的代码。因此,要享受预分叉共享,您需要在视图之外的代码中加载数据。例如,您可以考虑在构建application对象之前或之后加载数据(如 @john-strood 链接的要点中)。
如果您需要写入这些数据,第一个解决方案是使用uWSGI 缓存框架。它相当容易使用。您需要提前配置您需要多少内存,然后您的所有进程都可以对其进行读写。您不必处理锁定或其他与多处理相关的问题。缺点是您的进程和 uWSGI 缓存进程之间仍然会产生 IO 延迟。这对于小数据块来说是微不足道的,但对于千兆字节来说却是令人望而却步的。
作为最后的手段,如果您的数据不是只读的,并且您需要在所有请求中加载大块,大到即使通过 unix 套接字发送也会花费太长时间,那么您需要将数据直接加载到共享内存中空间。在这里 uWSGI 没有帮助,你必须自己处理锁定和多处理问题。您可以参考多处理的共享内存文档。
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |