摘要:解決過程關(guān)于什么是是一個上被廣泛使用的高性能的。和大多數(shù)的框架兼容,并具有實現(xiàn)簡單,輕量級,高性能等特點。為了解決這個問題,在實例化對象的時候要加上參數(shù)。參考用來,能否長連接連接從未發(fā)布和在上使用
問題描述
使用Flask開發(fā)的Web服務(wù),部署在服務(wù)器上使用的是gunicorn manage:app -k gevent -w 4
某日告警,說瀏覽器崩了,當(dāng)時急急忙忙的重啟,搞好了,因為所有的服務(wù)都正常運行,后面查看日志,也沒有發(fā)現(xiàn)什么特別的地方,最終感覺因該是MongoDB連接數(shù)滿了,本地測試發(fā)現(xiàn)確實是連接數(shù)一直增加,不會釋放。
什么是Gunicron:是一個unix上被廣泛使用的高性能的Python WSGI UNIX HTTP Server。和大多數(shù)的web框架兼容,并具有實現(xiàn)簡單,輕量級,高性能等特點。
深入理解uwsgi和gunicorn網(wǎng)絡(luò)模型
為什么要使用Gunicron:用于接受http請求并轉(zhuǎn)換為WSGI協(xié)議,以供實現(xiàn)了WSGI協(xié)議的flask使用,并且gunicorn得益于gevent等技術(shù),大幅度提高了性能,在生產(chǎn)環(huán)境以替代框架自帶的WSGI server。
生產(chǎn)環(huán)境配置
gevent==1.3.6
greenlet==0.4.14
gunicorn==19.9.0
pymongo==3.7.0
mongodb連接代碼
def __init__(self): config_name = os.getenv("FLASK_CONFIG") or "default" base_config = config[config_name] # object self.client = MongoClient(host=base_config.MONGO_HOST, port=base_config.MONGO_PORT) db_name = base_config.MONGO_NAME self.db = self.client[db_name]修改方案
參考pymongo: MongoClient opened before fork錯誤排解
fork是啟動新進(jìn)程的方法,由于MongoClient不是進(jìn)程安全的,所以不可以將該實例從父進(jìn)程中復(fù)制到子進(jìn)程當(dāng)中。在這個flask應(yīng)用中,flask使用gunicorn作為網(wǎng)關(guān)接口,在啟動的時候會啟動一個主進(jìn)程和多個子進(jìn)程,也就是master/workers,這個時候就出現(xiàn)了MongoClient實例在進(jìn)程之間的傳遞。
為了解決這個問題,在實例化MongoClient對象的時候要加上connect=False參數(shù)。
def __init__(self): config_name = os.getenv("FLASK_CONFIG") or "default" base_config = config[config_name] # object self.client = MongoClient(host=base_config.MONGO_HOST, port=base_config.MONGO_PORT, maxIdleTimeMS=300000, connect=False) db_name = base_config.MONGO_NAME self.db = self.client[db_name]參考
用gevent來host wsgi server,mysql能否長連接
python – Mongo連接從未發(fā)布 – Django和Mongoengine在gevent上使用gunicorn
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19571.html
摘要:解決過程關(guān)于什么是是一個上被廣泛使用的高性能的。和大多數(shù)的框架兼容,并具有實現(xiàn)簡單,輕量級,高性能等特點。為了解決這個問題,在實例化對象的時候要加上參數(shù)。參考用來,能否長連接連接從未發(fā)布和在上使用 問題描述 使用Flask開發(fā)的Web服務(wù),部署在服務(wù)器上使用的是gunicorn manage:app -k gevent -w 4 某日告警,說瀏覽器崩了,當(dāng)時急急忙忙的重啟,...
摘要:總結(jié)本次鏡像化大概花了一周的時間,包括測試和解決一些坑,很多知識點包括原來的項目都不是太熟悉,所以記錄一下,可能回頭會發(fā)現(xiàn)這些很,但是相信對一些人還是有用的。 背景 手里有一個web項目,代碼按照前端代碼庫、后端代碼庫分別在GitHub上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個項目的正常運作,但是這個項目也不是特別大,所以嘗試將代碼融合,于此同時將代碼d...
摘要:總結(jié)本次鏡像化大概花了一周的時間,包括測試和解決一些坑,很多知識點包括原來的項目都不是太熟悉,所以記錄一下,可能回頭會發(fā)現(xiàn)這些很,但是相信對一些人還是有用的。 背景 手里有一個web項目,代碼按照前端代碼庫、后端代碼庫分別在GitHub上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個項目的正常運作,但是這個項目也不是特別大,所以嘗試將代碼融合,于此同時將代碼d...
摘要:總結(jié)本次鏡像化大概花了一周的時間,包括測試和解決一些坑,很多知識點包括原來的項目都不是太熟悉,所以記錄一下,可能回頭會發(fā)現(xiàn)這些很,但是相信對一些人還是有用的。 背景 手里有一個web項目,代碼按照前端代碼庫、后端代碼庫分別在GitHub上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個項目的正常運作,但是這個項目也不是特別大,所以嘗試將代碼融合,于此同時將代碼d...
摘要:本文旨在梳理這些問題,進(jìn)行一個全面的分析。等到進(jìn)行數(shù)據(jù)庫操作的時候,再去中獲取一個連接,進(jìn)行操作總結(jié)通過以上分析,對于以下的數(shù)據(jù)庫連接池與關(guān)系型數(shù)據(jù)庫連接池并無區(qū)別。 摘要 在前面的文章中有分析過關(guān)系型數(shù)據(jù)庫的連接,以及連接池的原理。在mongo數(shù)據(jù)庫同樣存在,經(jīng)??吹接芯W(wǎng)友在問mongo 連接了數(shù)據(jù)庫要不要關(guān),怎么關(guān)。內(nèi)置的數(shù)據(jù)庫連接池是單線程還是多線程,mongo服務(wù)器為什么會殺游...
閱讀 1459·2021-11-22 13:54
閱讀 4382·2021-09-22 15:56
閱讀 1834·2021-09-03 10:30
閱讀 1331·2021-09-03 10:30
閱讀 2097·2019-08-30 15:55
閱讀 1865·2019-08-30 14:13
閱讀 2071·2019-08-29 15:19
閱讀 2376·2019-08-28 18:13