摘要:解决过程关于什么是是一个上被广泛使用的高性能的。和大多数的框架兼容,并具有实现简单,轻量级,高性能等特点。为了解决这个问题,在实例化对象的时候要加上参数。参考用来,能否长连接连接从未发布和在上使用
问题描述
使用Flask开发的Web服务,部署在服务器上使用的是gunicorn manage:app -k gevent -w 4
某日告警,说浏览器崩了,当时急急忙忙的重启,搞好了,因为所有的服务都正常运行,后面查看日志,也没有发现什么特别的地方,最终感觉因该是MongoDB连接数满了,本地测试发现确实是连接数一直增加,不会释放。
什么是Gunicron:是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。
深入理解uwsgi和gunicorn网络模型
为什么要使用Gunicron:用于接受http请求并转换为WSGI协议,以供实现了WSGI协议的flask使用,并且gunicorn得益于gevent等技术,大幅度提高了性能,在生产环境以替代框架自带的WSGI server。
生产环境配置
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是启动新进程的方法,由于MongoClient不是进程安全的,所以不可以将该实例从父进程中复制到子进程当中。在这个flask应用中,flask使用gunicorn作为网关接口,在启动的时候会启动一个主进程和多个子进程,也就是master/workers,这个时候就出现了MongoClient实例在进程之间的传递。
为了解决这个问题,在实例化MongoClient对象的时候要加上connect=False参数。
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连接从未发布 – Django和Mongoengine在gevent上使用gunicorn
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/19571.html
摘要:解决过程关于什么是是一个上被广泛使用的高性能的。和大多数的框架兼容,并具有实现简单,轻量级,高性能等特点。为了解决这个问题,在实例化对象的时候要加上参数。参考用来,能否长连接连接从未发布和在上使用 问题描述 使用Flask开发的Web服务,部署在服务器上使用的是gunicorn manage:app -k gevent -w 4 某日告警,说浏览器崩了,当时急急忙忙的重启,...
摘要:总结本次镜像化大概花了一周的时间,包括测试和解决一些坑,很多知识点包括原来的项目都不是太熟悉,所以记录一下,可能回头会发现这些很,但是相信对一些人还是有用的。 背景 手里有一个web项目,代码按照前端代码库、后端代码库分别在GitHub上,分散带来的结果是,不容易持续集成,比如你可能需要很多的job去保证一个项目的正常运作,但是这个项目也不是特别大,所以尝试将代码融合,于此同时将代码d...
摘要:总结本次镜像化大概花了一周的时间,包括测试和解决一些坑,很多知识点包括原来的项目都不是太熟悉,所以记录一下,可能回头会发现这些很,但是相信对一些人还是有用的。 背景 手里有一个web项目,代码按照前端代码库、后端代码库分别在GitHub上,分散带来的结果是,不容易持续集成,比如你可能需要很多的job去保证一个项目的正常运作,但是这个项目也不是特别大,所以尝试将代码融合,于此同时将代码d...
摘要:总结本次镜像化大概花了一周的时间,包括测试和解决一些坑,很多知识点包括原来的项目都不是太熟悉,所以记录一下,可能回头会发现这些很,但是相信对一些人还是有用的。 背景 手里有一个web项目,代码按照前端代码库、后端代码库分别在GitHub上,分散带来的结果是,不容易持续集成,比如你可能需要很多的job去保证一个项目的正常运作,但是这个项目也不是特别大,所以尝试将代码融合,于此同时将代码d...
阅读 1442·2021-11-22 13:54
阅读 4322·2021-09-22 15:56
阅读 1814·2021-09-03 10:30
阅读 1317·2021-09-03 10:30
阅读 2085·2019-08-30 15:55
阅读 1849·2019-08-30 14:13
阅读 2057·2019-08-29 15:19
阅读 2340·2019-08-28 18:13