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将会死亡。
如何管理此连接是否正确?
如果您需要** 300个单独的连接**,那么这个问题是无法解决的。如果你不这样做,你应该降低游泳池的大小。 *您*允许SQLAlchemy连接多个(250)连接。 – univerio
这个常量SQLALCHEMY_POOL_SIZE = 200不会改变任何东西。即使等于200个实际的mysql连接可能是800+ – scifi
那么这意味着你有多个池,这意味着你正在使用某种多进程。您需要将其降低到(MySQL可以处理的最大进程数)/(您拥有的进程数)。 – univerio