使用flask時候,我們經常使用logging來寫日誌。
但是gunicorn是多程序啟動的,logging程序不安全!
日誌經常會缺,只有一部分日誌。
就算整合到gunicorn的日誌中
if __name__ != '__main__':
gunicorn_logger = logging.getlogger('gunicorn.error')
還是只有部分日誌。
問題苦惱了我很久,今天無意間發現了乙個包concurrent_log
可以解決此類問題,具體使用方法在git上很明白,我就不贅述了。
原始碼也簡單看了看,很簡潔,簡單的思想就是用了2個鎖。
乙個鎖是靜態變數,基於gil就可以保證python的執行緒安全。
另乙個是程序鎖,用的是portalock檔案鎖,實現了nt和posix,所以大部分部署gunicorn的地方都能用。
concurrent_log就可以分別保證執行緒和程序安全,就git作者的測試來說(500k行log),效能還有所提高。
gunicorn 部署 flask 應用
一般比較習慣使用uwsgi進行部署django,flask應用。但,有時受許可權限制,無法安裝uwsgi,所以就使用gunicorn進行部署。之前使用python3的使用,發現 supervisor是不支援。所以就不打算用supervisor了。純粹介紹gunicorn 簡單部署方法,完整流程。環境...
使用gunicorn部署Flask
gunicorn是乙個python wsgi的web服務框架,只支援在unix系統上執行,於ruby的unicorn專案。gunicorn使用prefork master worker模型,能夠與各種wsgi web框架協作。gunicorn安裝非常簡單,使用命令pip install guncor...
gunicorn部署flask服務
greenlet是乙個輕量級的協程庫,gevent是基於greenlet的網路庫。gunicorn是支援wsgi協議的http server,gevent是它支援的模式之一。pip install gunicorn pip install gevent 3.啟動 gunicorn啟動有很多引數,可以...