我想知道运行在uwsgi上有多个进程+线程的Flask应用程序是否能访问在Flask应用程序类内定义的共同内存数据结构。
我的目标是: 我有一个Flask应用程序,将在nginx + uwsgi上运行。我希望每个HTTP请求都能访问存储在etcd数据库中的一些数据。但这很慢。为了加快HTTP响应速度,我考虑在Flask应用程序启动时将数据从DB加载到应用程序的内存中。因此,在每个请求中,可以从本地内存快速访问此数据,而不必询问etcd。
我如何实现这一点: 我定义了自己的Flaskapp类,并从“Flask”继承它,并重写了“init”以加载预先应用程序启动状态:
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
每个 Flask 请求是否都能读取self.stuff?由于我的背景是 C++,根据我的理解,这取决于uwsgi如何运行 Flask 应用程序。因此,我需要回答以下问题:1)每个uwsgi进程是否实例化 Flask App?2)还是uwsgi在内存中实例化 Flask App 实例一次,共享它并使每个进程在每个请求上仅调用此实例的 http 请求处理程序?我尝试搜索文档以了解uwsgi如何进行调度,但找不到足够的信息来理解这一点。因此,将感激任何帮助。如果这种内存共享行不通(这是我的直觉),有什么替代方法可以做到这一点吗?谢谢。