任何人都可以描述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