怎樣部署Flask服務(wù)?使用Gevent快速改造成高性能服務(wù)器
當(dāng)開發(fā)完了Flask的Web服務(wù),怎樣部署一個(gè)Web服務(wù)?
有三種方法:
直接app.run啟動(dòng)服務(wù),但是這個(gè)方式啟動(dòng)的服務(wù)性能很低,單線程; uwsgi服務(wù)器,可以支持多進(jìn)程+多線程+多協(xié)程的方式,性能最好,但是部署麻煩; gevent的pywsgi模塊,可以很簡(jiǎn)單的把單線程改造成單線程異步,性能很好
本文就介紹下第3種方式,只需要幾行代碼就能改造成高性能的flask服務(wù)器
原生的Flask服務(wù)器性能很低
啟動(dòng)一個(gè)最簡(jiǎn)單的Flask服務(wù),只需要這幾行代碼:
from?flask?import?Flask
app?=?Flask(__name__)
@app.route("/")
def?index():
????return?"success"
if?__name__?==?"__main__":
????app.run()
然而這樣啟動(dòng)的是一個(gè)單線程性能低的服務(wù)器;
使用gevent的pywsgi模塊做異步化改造
首先需要安裝gevent模塊,用pip安裝即可:
pip?install?gevent
然后就可以對(duì)Flask的代碼做改造,大家可以對(duì)比下區(qū)別:
from?gevent?import?monkey
monkey.patch_all()
from?flask?import?Flask
from?gevent?import?pywsgi
app?=?Flask(__name__)
@app.route("/")
def?index():
????return?"success"
if?__name__?==?"__main__":
????#?app.run()
????server?=?pywsgi.WSGIServer(
????????("0.0.0.0",?8888),?app)
????server.serve_forever()
通過簡(jiǎn)單的改造,這樣的就是一個(gè)單線程異步的服務(wù)器,能滿足大部分的性能需求了。
Gevent庫(kù)的簡(jiǎn)單介紹和原理
Gevent是Python非常好用的第三方異步編程庫(kù),是一個(gè)基于微線程庫(kù)Greenlet的并發(fā)框架。
Gevnet原理:提供猴子補(bǔ)丁MonkeyPatch方法,通過該方法gevent能夠 修改標(biāo)準(zhǔn)庫(kù)里面大部分的阻塞式系統(tǒng)調(diào)用,包括socket、ssl、threading和?select等模塊,而變?yōu)閰f(xié)作式運(yùn)行
? ?最后,安利下我自己的Python Flask Web開發(fā)視頻系列
評(píng)論
圖片
表情
