Flask+gevent 異步 WEB 架構

異步 WEB 架構的特色:python

gevent 爲 Python 提供了比較完善的協程支持,其基於 greenlet 實現協程。flask

當 greenlet 遇到如網絡訪問、磁盤 IO 等操做時,就將自動切換至其餘的 greenlet,待操做完成後,在適合的時間點回切 greenlet 繼續執行。因爲網絡訪問、磁盤 IO 等操做耗時較長,且實際 CPU 使用率較低(大部分工做由 DMA 等設備完成)。因此假若非異步,涉及以上操做併發將以順序執行, CPU 長期處於空閒狀態。而異步模式將能實現併發程序間的切換,從而保證 CPU 有較高的利用率,而不是等待如網絡訪問、磁盤 IO 等操做。 小程序

注意:gevent 的使用並不能減小實際 CPU 的使用量,因此若程序的執行過程消耗的全爲 CPU 資源,則其異步也是毫無心義的。網絡

 

Flask+gevent 的最小程序實例:閉包

最小程序實例以下。架構

from gevent import monkey

monkey.patch_all()

from flask import Flask

from gevent import pywsgi                                       

app = Flask(__name__)                                       

@app.route('/')

def index():

    return 'Hello World'                                   

server = pywsgi.WSGIServer(('127.0.0.1', 5000), app)

server.serve_forever()

注意:爲實現 Flask 與 gevent 的結合,需在程序開頭引入 monkey patch。monkey patch 將以閉包的形式修改能夠實現異步的標準庫,從而實現異步。併發

注意:需使用支持 gevent 的 WSGI,例如:gevent.pywsgi、gunicorn 等。app

相關文章
相關標籤/搜索