在Gunicorn分享记忆?

Eli*_*Eli 23 python networkx flask gunicorn

我有一个大的只读数据结构(在networkx中加载的图形,虽然这不应该很重要),我在我的Web服务中使用.Web服务是在Flask中构建的,然后通过Gunicorn提供服务.事实证明,对于我旋转的每个枪支工作者来说,这个工作都拥有我自己的数据结构副本.因此,当我有8个运行时,我的~700mb数据结构可以完全由一个工人管理,变成了一个非常大的内存.有没有什么方法可以在gunicorn进程之间共享这个数据结构,所以我不必浪费那么多内存?

Sea*_*ira 14

看起来最简单的方法是告诉gunicorn使用该preload_app选项预加载您的应用程序.这假设您可以将数据结构作为模块级变量加载:

from flask import Flask
from your.application import CustomDataStructure

CUSTOM_DATA_STRUCTURE = CustomDataStructure('/data/lives/here')

# @app.routes, etc.
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用内存映射文件(如果您可以使用自定义数据结构包装共享内存),使用gunicorn进行gevent以确保您只使用一个进程,或者使用多处理模块来启动自己的文件使用IPC连接的数据结构服务器.