<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>
参考アドレス:http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html
WSGI サーバーとは:
たとえば、Flask、webpy、Django、CherryPy にはすべて WSGI サーバーが付属しています。もちろん、組み込みの Web サーバーはテスト用です。オンラインで公開する場合は、高性能の wsgi サーバーを使用するか、nginx と組み合わせて uwsgi を実行します。
~$ sudo pip install gevent注: greenlet のインストールが失敗した場合は、Python ヘッダーをインストールする必要があります
~$ sudo apt-get install python-dev
II、Gunicorn コマンドは、Gunicorn のインストールが成功した後、次の 3 つの命令を使用して、Gunicorn 実行 WSGI アプリケーションまたは WSGI フレームワークを開始します。
1. gunicorn
Gunicorn サーバーの最も基本的なコマンド。最も基本的な wsgi アプリケーションを実行するために直接使用されます。
使用法: gunicorn [OPTIONS] APP_MODULE
OPTIONS オプションのパラメーター gunicorn を実行するための構成オプション (後で説明します)。
APP_MODULE は、$(MODULE_NAME):$(VARIABLE_NAME) の形式で wsgi アプリケーション ファイルを指定します。このうち module_name は実行する wsgi アプリケーションファイルを指定するために使用されますが、これは完全な装飾名です。
たとえば、現在のディレクトリ myapp ディレクトリに Python パッケージ gunicorn_app があり、gunicorn_app パッケージの下に wsgi アプリケーション ファイル test.py があります。
次に、 module_name を gunicorn_app.test として直接記述することができます。 module_nameファイルで呼び出されるオブジェクトの名前(関数と呼ばれるWSGI)を表します。
上記の例によれば、現在のディレクトリは /home/workspace/myapp で、myapp にはパッケージ gunicorn_app があり、test.py コードは次のとおりです:
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])テストでアプリを実行します。 .py gunicorn gunicorn_app.test: app 2. gunicorn_django
gunicorn_django コマンドは、Django アプリを Gunicorn サーバーにデプロイするために使用されます。
原理は gunicorn と同じですが、gunicorn_django が Django により適するように特別に処理されている点が異なります。
基本的な使用法: gunicorn_django [OPTIONS] [SETTINGS_PATH]
OPTIONS については前に説明しました。
SETTINGS_PATH django アプリの settings.py ファイルが配置されているディレクトリ。 書かれていない場合は、デフォルトで現在のディレクトリから検索されます。ただし、この使用法は、Django 1.4 以降のバージョンの django に適用されます。gunicorn コマンドを使用することを強くお勧めします。 。 N u 3. Gunicorn_Paster このコマンドは、公式文書の調査に興味があります。 3. Gunicorn の設定
Gunicorn は 3 つの異なる場所から設定情報を読み取ります。
まず、フレームワークによって定義された構成情報から読み取ります。現在、Paster フレームワークでのみ有効です。
2 番目: コマンド ラインで定義すると、コマンド ラインで定義された構成情報は、フレームワークで定義された同じパラメーター名の値を上書きします。
3 番目の場所: 構成ファイルを作成し、そのファイルに構成情報を書き込みます (これは Python ソース ファイルなので、Python コードを記述するのと同じです)。
gunicorn -h を介してすべてのコマンド構成情報を表示します
公式ドキュメントを介してさらに詳細な情報を表示することもできます: http://docs.gunicorn.org/en/19.2/
上記の myapp の例に基づく
gunicorn --workers=4 --bind=127.0.0.1:8000 myapp.gunicorn_app.test:app
上記のコマンドは 4 つのワーカーを開始し、127.0.0.1:8000 にバインドします
または、構成ファイルを次のように使用することもできますこれは config.py 設定ファイルのソース コードです:
import multiprocessing bind = "127.0.0.1:8001" workers = multiprocessing.cpu_count() * 2 + 1
gunicorn --config=config.py myapp.gunicorn_app.test:app
4. gunicorn フレームワークの紹介
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的时候,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教程有兴趣的朋友有所帮助。