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は死ぬだろう。
この接続を適切に管理するにはどうすればよいですか。
** 300の別々の接続**が必要な場合は、問題の回避方法はありません。そうしないと、プールのサイズを小さくする必要があります。 *あなた*は、SQLAlchemyがその数多くの(250)接続に接続できるようにしています。 – univerio
この定数SQLALCHEMY_POOL_SIZE = 200は何も変更しません。同じ200の実際のmysql接続が800 + – scifi
の場合でも、複数のプールを持つことになります。つまり、何種類かのプロセスを使用しています。それを(MySQLが処理できるプロセスの最大数)/(あなたが持っているプロセスの数)に下げる必要があります。 – univerio