Flask应用程序在部署时如何实际运行?

2024-04-27 19:36:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一些关于在部署Flask应用程序(例如,使用gunicorn)时如何执行代码的信息。在

例如,假设我在views.py中有以下内容:

foo = [2, 9, 3, 23, 45, 9]
foo.sort()

@app.route('/')
def index():
    return render_template('base.html', foo=foo)

foo何时排序?服务器启动时只有一次?每次有人提出要求?还有别的事吗?在

before_first_request和{}在documentation中的出现似乎提供了一些线索,但我无法理解它们要解决的问题,除非我理解代码在服务器上是如何运行的。在

你能一步一步地解释(例如,先发生A,然后B,然后C)或指出一个在线资源,请?在


Tags: 代码py服务器信息app应用程序flaskindex
1条回答
网友
1楼 · 发布于 2024-04-27 19:36:13

你要问的问题是,当发生在烧瓶上游的事件时会发生什么……比如古尼康启动时。在

烧瓶是一个Web Server Gateway Interface (WSGI) application framework。WSGI是一个特定于Python的框架,它定义了web服务器如何与应用程序交互。(Java的等价物是Java servlet。) 服务器将使用Python的WSGI协议在适当的时候调用Flask。deploying a standalone WSGI application上的Flask文档展示了如何手动设置它,并让您对Flask上游的情况有一点了解。 关于Gevent的部分很有用,因为它显式地显示了yourapplication的import语句及其与HTTP服务器的关系:

from gevent.wsgi import WSGIServer
from yourapplication import app  # if yourapplication imports from views,
                                 # the sort would happen once; here.

http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()

source code for gunicorn显示了类似的方法,每个工作线程加载一次WSGI应用程序,然后无限期地运行。在

。。。Flask的应用程序上下文

但是,您可能正在寻找一种方法来创建一些新的变量,实例化一个新的数据库连接,或者建立一个唯一的会话cookie,每次处理请求时都会发生这种情况,而不仅仅是在加载应用程序代码时。为此,你应该看看烧瓶的application context。引自引文:

The application context is created and destroyed as necessary. It never moves between threads and it will not be shared between requests. As such it is the perfect place to store database connection information and other things.

相关问题 更多 >