2016-07-31 72 views
1

我正在使用Flask + SQL Alchemy + MySQL编写多线程应用程序。烧瓶,SQLAlchemy和多线程:MySQL连接太多

SQL炼金术设置:

SQLALCHEMY_TRACK_MODIFICATIONS = True 
SQLALCHEMY_POOL_SIZE = 200 
SQLALCHEMY_MAX_OVERFLOW = 50 
SQLALCHEMY_POOL_RECYCLE = 5 

我的应用程序最多可以同时运行300个线程。在每个线程有一些DB用法,如:

# task == my model 
db.session.add(task) 

task.progress += 1 
db.session.commit() 

和一些更复杂的代码

3-5分钟的工作我的MySQL后会消失,因为连接太多的路程。 我试过db.session.close()db.session.bind.dispose()每个线程完成他的工作后。但它没有帮助,在3-5分钟内将有200多个连接,MySQL将会死亡。

如何管理此连接是否正确?

+0

如果您需要** 300个单独的连接**,那么这个问题是无法解决的。如果你不这样做,你应该降低游泳池的大小。 *您*允许SQLAlchemy连接多个(250)连接。 – univerio

+0

这个常量SQLALCHEMY_POOL_SIZE = 200不会改变任何东西。即使等于200个实际的mysql连接可能是800+ – scifi

+0

那么这意味着你有多个池,这意味着你正在使用某种多进程。您需要将其降低到(MySQL可以处理的最大进程数)/(您拥有的进程数)。 – univerio

回答

0

你可以用这种方式。

首先去你的mysql服务器并更改max_connections选项。

set global max_connections = 1000;