2017-05-12 94 views
0

私はpythonでflask-sqlalchemyライブラリを使用して自分のデータベース(my sql)を管理しています。私は、クエリをテストするとき はしかし、それは私に、このエラーを与える:Pythonフラスコ - SQLAlchemyクエリのタイムアウトエラー

sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 10 

テストコードは単純です:

def test_query(self, i): 
     random = str(i) 
     result = Dao.query_user_by_nick("kael") 
     print("end query at %s, id: %s" % (datetime.datetime.now(), random), "\n result: " + str(len(result))) 



threads = [] 
    for i in range(0,100): 
     test = threading.Thread(target=test_query, args=(self, str(i))) 
     threads.append(test) 
    for t in threads: 
     t.start() 

query_user_by_nickの実装です:

@classmethod 
def query_user_by_nick(self,name): 
    user = User.query.filter_by(nick_name=name).all() 
    return user 

私は、クエリを実行していますマルチスレッドでは、このエラーは常に発生し、私はそれがどうなるのか分かりません。私はまた、マルチスレッドでいくつかのデータを挿入し、それは正常に動作します。 私は周りを検索し、何も私に影響を与えませんでした。誰かが接続が15に制限されると言いましたが、このデータベースは非常に頻繁にクエリになります。 誰かが私に何か示唆を与えることができたらうれしいです。前もって感謝します。

答えて

0

あなたのデータベースがそれを扱うことができると思うなら、あなたはhttp://flask-sqlalchemy.pocoo.org/2.1/config/経由SQLAlchemyのプール設定を増やすことができる必要があります:

  • SQLALCHEMY_MAX_OVERFLOWは、あなたがしたいの同時接続の最大数まで(10から)を大きくすることができます応答時間が主要な関心事ではない場合
  • SQLALCHEMY_POOL_TIMEOUTがプールから接続を取得するために待機中のスレッドのためのより多くの時間を与えるために
+0

を増加させることができる許可をありがとう、ええ、これは問題を少し解決しますが、WHありませんスレッドを増やすと、クエリのタイムアウトエラーも発生します。幸いにも、私は多くのスレッドをサポートする必要はありません。だから、これは私にとっては良い解決策です。ありがとうございます –

+0

喜んでそれが役立ちます。カルマを守るために答えを受け入れることを検討してください。 :) – TheArchitect

関連する問題