2016-07-31 11 views
1

Flask + SQL Alchemy + MySQLを使用してマルチスレッドアプリケーションを書いています。Flask、SQLAlchemy、マルチスレッド:MySQLが多すぎます

SQL錬金術の設定:

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

私のアプリが同時に300スレッドまで実行していることができます。

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

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

と私のMySQLを作業の3-5分後にいくつかのより複雑なコード

ためにあまりにも多くの接続を去っます:すべてのスレッドでのようないくつかのDBの利用があります。 すべてのスレッドが作業を完了した後、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オプションを変更してください。

グローバルmax_connections = 1000を設定します。

関連する問題