Gunicorn und Flask spricht durch WSGI, die zwei Seiten hat: Server-Seite und die Anwendungsseite.
über die Anwendung (Gerüst) Seite brauchen wir eine aufrufbar zu schaffen, das einfachste Beispiel:
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World']
der Server diese Anwendung aufrufen und Umgebungsinformationen und eine Callback-Funktion bereitstellt, die Start, um anzuzeigen, verwendet wird, einer Antwort. Wenn der Server die Antwort erhält, wird sie an den Browser zurückgegeben.
so, für gunicorn und Kolben:
from flask import Flask
app = Flask(__name__)
wenn Sie dies tun, haben Sie eigentlich eine WSGI kompatible Anwendung kam, ist app
eine aufrufbare:
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)
und beim Ausführen von gunicorn app:app
, Sie sagen Gunicorn, wo Sie Ihre Anwendung laden, source
Wenn eine Anfrage kommt, analysiert Gunicorn es, ein Diktat 012 zu konstruieren, die here definiert ist, Informationen wie REQUEST_METHOD
enthält, QUERY_STRING
etc, dann die Anwendung aufrufen (a Flask Objekt!) Mit sich: app(environ, start_repsonse)
source, start_repsonse
ist ein Rückruf in Gunicorn den reponse Status und Header zu bekommen, und den Rückgabewert Der Anruf app
wird als Antworttext gesendet.
Was ist der Unterschied zwischen dem Aufruf von app.run() und dem Aufruf von flask-Anwendungen mit Gunicorn? – neel
'app.run()' wird die App mit dem eingebauten wsgi-Server von flask ausführen, der für Entwicklungszwecke gedacht ist und unter hoher Last schlecht funktioniert. während Gunicorn in hohem Grade für Leistung optimiert wird – wong2
gunicorn python_file: app teilt Gunicorn mit, wo man deine Anwendung lädt. Was heißt das? Kannst du es etwas weiter erklären? – neel