1. 程式人生 > >高效能框架gevent和gunicorn在web上的應用及效能測試

高效能框架gevent和gunicorn在web上的應用及效能測試

WSGI Server有哪些:

比如 Flask,webpy,Django、CherryPy 都帶著 WSGI server 。當然效能都不好,自帶的web server 更多的是測試用途, 線上釋出時,則使用高效能的 wsgi server或者是聯合nginx做uwsgi 。

誠如那個WSGI的定義所說的,協議定義了一套介面來實現伺服器端與應用端通訊的規範化(或者說是統一化)。這是怎樣的一套介面呢?很簡單,尤其是對於應用端。

更多關於wsgi server的介紹,請到我的個人部落格看看,   http://xiaorui.cc

233615185.png

神器 Gunicorn是一個Python WSGI UNIX的HTTP伺服器。這是一個預先叉工人模式,從Ruby的獨角獸(Unicorn)專案移植。該Gunicorn伺服器與各種Web框架相容,我們只要簡單配置執行,輕量級的資源消耗,以及相當迅速。它的特點是與各個web結合緊密,部署特別方便。 缺點也很多,不支援HTTP 1.1,併發訪問效能不高。

安裝 gunicorn  ~

pip install gunicorn

233931792.jpg

這裡我們說下 gunicorn 的用法

最簡單的執行方式就是:

1 gunicorn code:application

其中code就是指code.py,application就是那個wsgifunc的名字。

這樣執行的話, gunicorn 預設作為一個監聽 127.0.0.1:8000 的web server,可以在本機通過: http://127.0.0.1:8000 訪問。

如果要通過網路訪問,則需要繫結不同的地址(也可以同時設定監聽埠):

1 2 gunicorn -b 10.2.20.66:8080 code:application #from http://rfyiamcool.blog.51cto.com

在多核伺服器上,為了支援更多的併發訪問並充分利用資源,可以使用更多的 gunicorn 程序:

1 gunicorn -w 8 code:application

這樣就可以啟動8個程序同時處理HTTP請求,提高系統的使用效率及效能。

另外, gunicorn 預設使用同步阻塞的網路模型(-k sync),對於大併發的訪問可能表現不夠好, 它還支援其它更好的模式,比如:gevent或meinheld。

源地址 http://rfyiamcool.blog.51cto.com/1030776/1276364

#  gevent

gunicorn -k gevent code:application

#  meinheld

gunicorn -k egg:meinheld#gunicorn_worker code:application

當然,要使用這兩個東西需要另外安裝,具體請參考各自的文件。

以上設定還可以通過 -c 引數傳入一個配置檔案實現。

gunicorn 的配置檔案

1 2 3 4 5 6 7 8 9 10 11 [[email protected]66 tmp]# cat gun.conf import os bind = '127.0.0.1:5000' workers = 4 backlog = 2048 worker_class = "sync" debug = True proc_name = 'gunicorn.proc' pidfile = '/tmp/gunicorn.pid' logfile = '/var/log/gunicorn/debug.log' loglevel = 'debug'

python web 一個例子