2016-07-31 96 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;