1. 程式人生 > >用gunicorn+gevent啟動Flask專案

用gunicorn+gevent啟動Flask專案

Flask,webpy,Django都帶著 WSGI server,當然效能都不好,自帶的web server 更多的是測試用途。線上釋出時,則使用高效能的 wsgi server或者是聯合nginx做uwsgi 。
greenlet是一個輕量級的協程庫。gevent是基於greenlet的網路庫。
guincorn是支援wsgi協議的http server,gevent只是它支援的模式之一 ,是為了解決django、flask這些web框架自帶wsgi server效能低下的問題。它的特點是與各個web框架結合緊密,部署特別方便。

gunicorn安裝和使用

安裝

pip install gunicorn

啟動

gunicorn code:application
其中code就是指python程式程式碼code.py,application就是那個wsgi func的名字。這樣執行的話, gunicorn 預設作為一個監聽 127.0.0.1:8000 的web server,可以在本機通過: http://127.0.0.1:8000 訪問。

設定監聽埠

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

使用多程序

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


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

配合gevent

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

# gevent
gunicorn -k gevent code:application

指定配置檔案

以上設定還可以通過 -c 引數傳入一個配置檔案實現。
gunicorn - gun.conf code:application

# 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'

關於gevent

gevent是一個基於libev的併發庫。它為各種併發和網路相關的任務提供了整潔的API。gunicorn對於“協程”也就是Gevent的支援非常好。
gevent程式設計師指南:gevnet指南
gevent.monkey介紹詳見:關於gevent monkey

簡單的Flask應用

Flask是一個輕量級的Web框架,核心簡單而易於擴充套件。Flask介紹詳見:Flask文件
用Flask簡單寫了一個web例子,如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

用gunicorn啟動Flask應用

配置檔案gun.py

import os
import gevent.monkey
gevent.monkey.patch_all()

import multiprocessing

debug = True
loglevel = 'debug'
bind = '0.0.0.0:8800'
pidfile = 'log/gunicorn.pid'
logfile = 'log/debug.log'

#啟動的程序數
workers = multiprocessing.cpu_count() * 2 + 1 
worker_class = 'gunicorn.workers.ggevent.GeventWorker'

x_forwarded_for_header = 'X-FORWARDED-FOR'

使用gunicorn來啟動

gunicorn -c gun.py hello:app

單純的flask 自帶的web伺服器做下測試,會看到壓力大的時候出現socket的問題,因為他是單程序單執行緒的。使用gunicorn來啟動,響應速度和能力提升顯著。
配置中workers指定啟動的程序數。cpu的損耗是平均到各個程序。workers的值一定不要過大,畢竟多程序對於系統的排程消耗比較大。

友情推薦

推薦一下極客時間阿里架構師的專欄,乾貨滿滿,掃碼優有惠、贈30元新手券。
這裡寫圖片描述