任何人都可以描述Gunicorn
如何将请求转发给Flask
internally
?Gunicorn如何向瓶子发送请求
如果有人解释从接收Gunicorn的请求到将其转发给Flask和相反方法的过程中涉及的每个步骤,这将是非常好的。
在解释我是这方面的新手时请记住。
任何人都可以描述Gunicorn
如何将请求转发给Flask
internally
?Gunicorn如何向瓶子发送请求
如果有人解释从接收Gunicorn的请求到将其转发给Flask和相反方法的过程中涉及的每个步骤,这将是非常好的。
在解释我是这方面的新手时请记住。
Gunicorn和Flask通过WSGI进行对话,它有两个方面:服务器端和应用端。
应用(框架)侧,我们需要提供一个可调用的,最简单的例子:
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World']
服务器将调用该应用程序,并提供环境信息和用于指示开始回调函数的回应。当服务器得到响应时,它将返回给浏览器。
所以,对于gunicorn和瓶:
from flask import Flask
app = Flask(__name__)
,当你这样做,你实际上已经有一个WSGI兼容的应用程序,app
是可以调用的:
class Flask(object):
...
def __call__(self, environ, start_response):
"""Shortcut for :attr:`wsgi_app`."""
return self.wsgi_app(environ, start_response)
[source](https://github.com/mitsuhiko/flask/blob/master/flask/app.py#L1976)
,并在运行gunicorn app:app
,你告诉gunicorn在哪里加载你的应用程序,source
当一个请求来了,gunicorn解析它,构造一个字典environ
,其定义here,包含信息,如REQUEST_METHOD
,QUERY_STRING
等,然后调用应用程序(瓶对象!)它:app(environ, start_repsonse)
source,start_repsonse
是Gunicorn回调拿到效应初探状态和标题,和返回值app
调用将作为响应主体发送。
使用Gunicorn调用app.run()和调用flask应用程序有什么区别? – neel
'app.run()'将使用内置的烧瓶wsgi服务器来运行应用程序,这是用于开发目的,并且在高负载下性能较差。而gunicorn对性能进行了高度优化 – wong2
gunicorn python_file:应用程序会告诉gunicorn到何处加载您的应用程序。这是什么意思?你能稍微解释一下吗? – neel