如何使用gevent優(yōu)化flask?
Python通過yield提供了對協(xié)程的基本支持,但是不完全。而第三方的gevent為Python提供了比較完善的協(xié)程支持。
gevent是第三方庫,通過greenlet實現(xiàn)協(xié)程,其基本思想是:
當(dāng)一個greenlet遇到IO操作時,比如訪問網(wǎng)絡(luò),就自動切換到其他的greenlet,等到IO操作完成,再在適當(dāng)?shù)臅r候切換回來繼續(xù)執(zhí)行。由于IO操作非常耗時,經(jīng)常使程序處于等待狀態(tài),有了gevent為我們自動切換協(xié)程,就保證總有g(shù)reenlet在運行,而不是等待IO。
gevent實現(xiàn)了異步、IO非阻塞的功能。
由于切換是在IO操作時自動完成,所以gevent需要修改Python自帶的一些標(biāo)準(zhǔn)庫,這一過程在啟動時通過monkey patch完成:
一. 安裝gunicorn和gevent:pip install gunicorn / pip install gevent
二. 啟動gunicorn(注:這時必須進(jìn)入你項目的根目錄且處于虛擬環(huán)境中,因為gunicorn安裝在虛擬環(huán)境中)
1. 配置gunicorn啟動配置文件,在項目的根目錄創(chuàng)建一個gun.conf
2. 然后執(zhí)行以下代碼啟動:gunicorn -k gevent -c gun.conf app:app