Sqlalchemy
ユーザー入力を介して重いSQLクエリを実行する必要があるFlask
ウェブアプリケーションがあります。クエリのタイムアウトを設定したいと思います.20秒としましょう。クエリが20秒以上かかると、サーバーはユーザーにエラーメッセージを表示して、後で入力をやり直すことができます。Flaskで長いSQLクエリを処理する方法は?
Flask開発サーバーとGunicornの両方で、multiprocessing
とthreading
モジュールの両方を試してみました。サーバーはブロックされ続け、エラーメッセージは返されません。以下に、コードの抜粋を示します。
どのようにユーザーフレンドリーな方法でFlaskで遅いSQLクエリを処理しますか?
ありがとうございました。
from multiprocessing import Process
@app.route("/long_query")
def long_query():
query = db.session(User)
def run_query():
nonlocal query
query = query.all()
p = Process(target=run_query)
p.start()
p.join(20) # timeout of 20 seconds
if p.is_alive():
p.terminate()
return render_template("error.html", message="please try with smaller input")
return render_template("result.html", data=query)
ありがとうございました!私は実際に 'python-rq'を既にこのWebアプリケーションの別の部分に使用しています。重いSQLクエリを処理するより簡単な方法を探していますが、' celery'と思われ、 'python-rq'がやり方ですこの問題。 – Son