Gunicorn i Flask rozmawiają przez WSGI, która ma dwie strony: stronę serwera i stronę aplikacji.
na aplikacji (framework) strony, musimy zapewnić wywoływalnym, najprostszy przykład:
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World']
serwer będzie zadzwonić do tej aplikacji i dostarczanie informacji środowiskowej i funkcji zwrotnej, która jest wykorzystywana do wskazania początek odpowiedzi. kiedy serwer otrzyma odpowiedź, zwróci ją do przeglądarki.
tak, dla gunicorn i kolby:
from flask import Flask
app = Flask(__name__)
kiedy to zrobić, rzeczywiście masz aplikację kompatybilną WSGI, app
jest wymagalne:
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)
i po uruchomieniu gunicorn app:app
, mówisz gunicornowi, gdzie załadować twoją aplikację, source
kiedy przychodzi żądanie, gunicorn je analizuje, konstruuje dyktando environ
, który jest zdefiniowany here, zawiera informacje jak REQUEST_METHOD
, QUERY_STRING
etc, a następnie wywołać aplikację (obiekt Kolba!) Z nim: app(environ, start_repsonse)
source, start_repsonse
jest zwrotna w Gunicorn aby uzyskać jego status réponse i nagłówków, a wartość zwracaną wywołanie app
zostanie wysłane jako treść odpowiedzi.
Jaka jest różnica między wywołaniem aplikacji app.run() a wywoływaniem kolby za pomocą Gunicorn? – neel
'app.run()' uruchomi aplikację z wbudowanym serwerem wsgi z kolbą, który służy do celów programistycznych i słabo działa przy dużym obciążeniu. podczas gdy gunicorn jest wysoce zoptymalizowany pod kątem wydajności – wong2
gunicorn python_file: aplikacja powie gunicorn dokąd załadować twoją aplikację. Co to znaczy? Czy możesz wyjaśnić to nieco dalej? – neel