Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶+;Gevent PyWSGI+;MySQL连接器:从池中获取连接时,有时会挂起_Python_Mysql_Flask_Gevent - Fatal编程技术网

Python 烧瓶+;Gevent PyWSGI+;MySQL连接器:从池中获取连接时,有时会挂起

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,它工作正常。每一项申请均同时送达 过了一段时间,我又提出了两个请求。。标准件不能卡在正上方的测井线

我正在开发一个Flask服务器,使用Gevent PyWSGI和MySQL连接器作为DB驱动程序。在monkey_补丁使其同时服务多个请求之后,我发现有时我的服务器挂起了2个或更多的并发请求,我必须重新启动服务器才能正常工作。 详情:

  • 我设置了MySQL连接池(Pool_size=10),并在应用程序上共享这个单一池实例
  • 当运行时,在一开始,一切似乎都很好,我看到池初始化10连接到MySQL,它工作正常。每一项申请均同时送达
  • 过了一段时间,我又提出了两个请求。。标准件不能卡在正上方的测井线上:
然后什么也没发生。MySQL连接(通过
show processlist
)正在休眠,我的服务器挂起。 所以,我的问题是:

  • 我这里有比赛条件吗?问题在哪里?Gevent Pywsgi或Mysql连接器
  • 这里哪种方法是正确的?MysqlConnectionPool不能在线程上重用,我应该为每个greenlet初始化每个连接吗

您可能需要gevent的特定mysql模块。UltraMysql位于以下位置:

你应该看看这个例子。这在我所有的生产环境中都非常有效

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