<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">官方地址:http://gunicorn.org/</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> http://docs.gunicorn.org/en/19.2/</span>
Referenzadresse: http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html
.com/1030776/1276364
1. Einführung
Was sind die WSGI-Server:
Beispielsweise werden Flask, Webpy, Django und CherryPy alle mit WSGI-Server geliefert. Natürlich ist die Leistung nicht gut. Wenn Sie online veröffentlichen, verwenden Sie einen Hochleistungs-WSGI-Server oder kombinieren Sie ihn mit Nginx, um UWSGI auszuführen.
2. Gunicorn installieren
~$ sudo pip install gunicorn
Wenn Sie möchten, dass Gunicorn asynchrone Worker unterstützt, müssen Sie drei Python-Pakete installieren 🎜>
~$ sudo pip install greenlet ~$ sudo pip install eventlet ~$ sudo pip install geventHinweis: Wenn die Installation von Greenlet fehlschlägt, Sie müssen Python-Header installieren Gunicorn (Version 19.1.1)
Beispielsweise gibt es ein Python-Paket gunicorn_app und das Paket gunicorn_app im aktuellen Verzeichnis. Das MyApp-Verzeichnis enthält eine WSGI-Anwendungsdatei test.py.
Dann kann module_name direkt als gunicorn_app.test geschrieben werden.
Variablenname stellt den Namen des Objekts (ein aufrufbares WSGI, das eine Funktion sein kann) dar, das in der Datei module_name aufgerufen werden soll.
Gemäß dem obigen Beispiel ist das aktuelle Verzeichnis /home/workspace/myapp, und in myapp gibt es ein Paket gunicorn_app. Der test.py-Code lautet wie folgt:
Wir werden die Test-App ausführen
def app(environ, start_response): """Simplest possible application object""" data = 'Hello, World!\n' status = '200 OK' response_headers = [ ('Content-type','text/plain'), ('Content-Length', str(len(data))) ] start_response(status, response_headers) return iter([data])
2. gunicorn_django
Der Befehl guniorn_django wird verwendet, um die Django-App bereitzustellen Gunicorn-Server.
Eigentlich ist das Prinzip das gleiche wie bei gunicorn, außer dass gunicorn_django speziell verarbeitet wurde, um es besser für Django geeignet zu machen.
Grundlegende Verwendung: gunicorn_django [OPTIONS] [SETTINGS_PATH]
OPTIONS wurde bereits erwähnt.
SETTINGS_PATH Das Verzeichnis, in dem sich die Datei „settings.py“ in der Django-App befindet. Wenn sie nicht geschrieben wird, wird sie standardmäßig im aktuellen Verzeichnis gesucht.
Diese Verwendung gilt jedoch für Django1.4 und höher. Es wird dringend empfohlen, den Befehl gunicorn für Django1.4 und höher zu verwenden.
3. gunicorn_paster
Wenn Sie an diesem Befehl interessiert sind, können Sie ihn in der offiziellen Dokumentation studieren.
3. Gunicorn-Konfiguration
Gunicorn liest Konfigurationsinformationen von drei verschiedenen Orten.
Der erste Platz: Lesen Sie die vom Framework definierten Konfigurationsinformationen aus, die derzeit nur für das Paster-Framework gültig sind.
Zweiter Platz: In der Befehlszeile definiert. Die in der Befehlszeile definierten Konfigurationsinformationen überschreiben den im Framework definierten Wert desselben Parameternamens.
Der dritte Ort: Erstellen Sie eine Konfigurationsdatei und schreiben Sie die Konfigurationsinformationen in die Datei (es handelt sich um eine Python-Quelldatei, Sie sind also so, als würden Sie Python-Code schreiben).
Alle Befehlskonfigurationsinformationen über gunicorn -h anzeigen
Detailliertere Informationen können Sie auch in der offiziellen Dokumentation anzeigen: http://docs.gunicorn.org/en/19.2/
Zum Beispiel basierend auf dem Myapp-Beispiel oben
gunicorn --workers=4 --bind=127.0.0.1:8000 myapp.gunicorn_app.test:app
oben Der Befehl startet 4 Worker und bindet an 127.0.0.1:8000
Oder Sie können die Konfigurationsdatei verwenden:
gunicorn --config=config.py myapp.gunicorn_app.test:app
import multiprocessing bind = "127.0.0.1:8001" workers = multiprocessing.cpu_count() * 2 + 1
Gunicorn是基于pre-fork模型的。也就意味着有一个中心管理进程(master process)用来管理worker进程集合。Master从不知道任何关于客户端的信息。所有请求
和响应处理都是由worker进程来处理的。
Master(管理者)
主程序是一个简单的循环,监听各种信号以及相应的响应进程。master管理着正在运行的worker集合。
Worker类型
1. Sync Workers
最基本的也是默认的worker type。
一个同步的worker class,同一时间只能控制一个request请求。
2. Async Workers
异步workers的使用是基于Greenlets(通过Eventlet和Gevent)。所以使用此worker type之前一定要安装好python对应的包。
Greenlets是python多线程协作的一个实现。
3. Tornado Workers
这是一个Tornado worker class。
五、Gunicorn部署
使用Gunicorn必须基于一个代理服务器。
1. Nginx Configuration
虽然有很多HTTP代理可以使用,但是我们还是强烈推荐Nginx。如果你选择了其他代理服务器,你需要确认,当你使用默认的Gunicorn workers时,它能够buffers slow clients。没有buffering Gunicorn将很容易受 denial of service attacks的影响。也可使用 slowloris 去核实你的代理服务器是否工作良好。
如下是一个nginx配置文件实例(假设127.0.0.1:8888端口已经被gunicorn绑定监听):
server { #listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default ipv6only=on; ## listen for ipv6 listen 80; client_max_body_size 4G; server_name www.android_stat.com keepalive_timeout 5; location / { try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://127.0.0.1:8888; }
注意:要监控Gunicorn的时候,Gunicorn不能启动daemon模式,如果使用daemon模式会fork出一个进程,这样监控工具就没法监控这个进程。
我在这只介绍supervisor
1. Supervisor
Supervisor可以用来监控进程,下面是一个简单的supervisor的配置文件:
[program:gunicorn] command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py directory=/path/to/project user=nobody autostart=true autorestart=true redirect_stderr=true
以上就介绍了nginx+gunicorn+django,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。