【发布时间】:2019-01-10 17:01:24
【问题描述】:
我想知道在 uwsgi 上运行的具有多个进程+线程的 Flask 应用程序是否可以访问 Flask 应用程序类中定义的公共内存数据结构。
我正在尝试做的事情: 我有一个烧瓶应用程序,它将在 nginx + uwsgi 上运行。我希望每个 http 请求都能访问位于 etcd 数据库中的一些数据。但是,这很慢。为了加快 http 响应,我正在考虑在烧瓶应用程序启动时将数据从数据库加载到烧瓶应用程序的内存中。因此,在每次请求时,都可以从本地内存中快速访问这些数据,而不是询问 etcd。
我是如何尝试这样做的: 我已经定义了我自己的 Flaskapp 类并从“Flask”继承它并覆盖了“init”以加载 pre-appstart 状态:
class FlaskApp(Flask):
def __init__(self, *args, **kwargs):
self.populate_info() # This function will load stuff
super(FlaskApp, self).__init__(*args, **kwargs)
def populate_info(self):
self.stuff = []
#load stuff from db to self.stuff
每个烧瓶请求都能够读取 self.stuff 吗?根据我的理解,来自 C++ 背景,这取决于 uwsgi 如何运行烧瓶应用程序。所以我需要答案:1)每个 uwsgi 进程都实例化 Flask App 吗? 2)还是uwsgi在内存中实例化Flask App实例一次,在每个进程之间共享,然后每个进程在每个请求上只调用该实例的http请求处理程序?我尝试搜索文档以了解 uwsgi 如何安排这一点,但找不到足够的信息来理解这一点。所以会很感激任何帮助。如果这种内存共享不起作用(这是我的预感),有什么替代方法呢?谢谢。
【问题讨论】: