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