Python 烧瓶+;Gevent PyWSGI+;MySQL连接器:从池中获取连接时,有时会挂起
我正在开发一个Flask服务器,使用Gevent PyWSGI和MySQL连接器作为DB驱动程序。在monkey_补丁使其同时服务多个请求之后,我发现有时我的服务器挂起了2个或更多的并发请求,我必须重新启动服务器才能正常工作。 详情:Python 烧瓶+;Gevent PyWSGI+;MySQL连接器:从池中获取连接时,有时会挂起,python,mysql,flask,gevent,Python,Mysql,Flask,Gevent,我正在开发一个Flask服务器,使用Gevent PyWSGI和MySQL连接器作为DB驱动程序。在monkey_补丁使其同时服务多个请求之后,我发现有时我的服务器挂起了2个或更多的并发请求,我必须重新启动服务器才能正常工作。 详情: 我设置了MySQL连接池(Pool_size=10),并在应用程序上共享这个单一池实例 当运行时,在一开始,一切似乎都很好,我看到池初始化10连接到MySQL,它工作正常。每一项申请均同时送达 过了一段时间,我又提出了两个请求。。标准件不能卡在正上方的测井线
- 我设置了MySQL连接池(Pool_size=10),并在应用程序上共享这个单一池实例
- 当运行时,在一开始,一切似乎都很好,我看到池初始化10连接到MySQL,它工作正常。每一项申请均同时送达
- 过了一段时间,我又提出了两个请求。。标准件不能卡在正上方的测井线上:
show processlist
)正在休眠,我的服务器挂起。
所以,我的问题是:
- 我这里有比赛条件吗?问题在哪里?Gevent Pywsgi或Mysql连接器
- 这里哪种方法是正确的?MysqlConnectionPool不能在线程上重用,我应该为每个greenlet初始化每个连接吗
class PoolManager:
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
self._init()
def _init(self):
self._pool = MySQLConnectionPool(*self.args, **self.kwargs)
def get_connection(self):
#logging greenlet id
print("Start get connection from pool....")
print("GID {}".format(id(gevent.getcurrent())))
new_cnx = self._pool.get_connection()
print(" -------CONN_ID: {}".format(new_cnx.__getattr__("connection_id")))
return new_cnx
Start get connection from pool....
GID 123xxxxx
Start get connection from pool....
GID 321xxxxx