<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 Server有哪些:
Flask、webpy、Django、CherryPy 都附有WSGI Server 。當然效能都不好,自帶的web server更多的是測試用途, 線上發佈時,則使用高效能的 wsgi server或者是聯合nginx做uwsgi 。
二、安裝gunicorn
~$ sudo pip install gunicorn
~$ sudo pip install greenlet
~$ sudo pip install eventlet
~$ sudo pip install gevent
說明:如果安裝greenlet失敗的話,你需要安裝Python headers
~$ sudo apt-get llll python-devadm 可以看看orn - -version gunicorn (version 19.1.1)
Gunicorn server中最基本的指令,直接使用最基本的 wsgi application 。
用法:gunicorn [OPTIONS] APP_MODULE
OPTIONS 選用參數 運行gunicorn的設定選項,後面會講到。
APP_MODULE 指定 wsgi application檔案,書寫格式 $(MODULE_NAME):$(VARIABLE_NAME)。其中 module_name用來指定將要執行的 wsgi application檔案,可是一個完整的點綴名稱。
例如目前目錄myapp目錄下有個python包gunicorn_app, gunicorn_app包下有一個wsgi application文件test.py。
則module_name可以直接寫成gunicorn_app.test。
variable_name表示在module_name檔案中要呼叫的物件(是一個WSGI callable,可以是一個函數)名稱。
依照上面的例子,目前目錄為/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])
基本用法:gunicorn_django [OPTIONS] [SETTINGS_PATH]
OPTIONS 前面已經說過了。
SETTINGS_PATH django app中 settings.py檔案所在的目錄,不寫的話預設在目前目錄下查找。 不過這種用法適用於django1.4以前,對於Django1.4版本以後強烈建議使用gunicorn指令。 3. gunicorn_paster 此指令有興趣到官方文件中研究。
三、Gunicorn配置
Gunicorn從三個不同的地方讀取設定資訊。
第一個地方:從framework定義的設定資訊讀取,目前只對Paster架構有效。
第二個地方:在命令列中定義,命令列中定義的設定資訊將會覆寫框架中定義的相同的參數名稱的值。
第三個地方:建立一個設定文件,把設定資訊寫入文件(是一個python原始文件,所以你就像在寫python程式碼一樣)。
透過gunicorn -h 查看所有指令設定資訊
內容
gunicorn --workers=4 --bind=127.0.0.1:8000 myapp.gunicorn_app.test:app 上面的指令啟動4個workers,綁定至127.0.0.1:80是一個config.py設定檔原始碼: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教程有兴趣的朋友有所帮助。