私はウェブのデータをクロールして検索のスコアを計算する機能を持っています。ただし、これには時間がかかることがあり、実行を終了する前にウェブページがタイムアウトすることがあります。スレッドが完了したときにFlaskでレンダリングされたテンプレートを変更するにはどうすればよいですか?
したがって、私は関数を実行する別のスレッドを作成し、クライアントにデータがまだ収集されていることを伝えるloading.html
を作成しました。関数がスレッドで終了すると、スコアを表示するoutput.html
を表示するようにWebページを再ロードするにはどうすればいいですか?
これは私がこれまで持っているものの簡単なバージョンです:
from flask import Flask
from flask import render_template
from threading import Thread
app = Flask(__name__)
@app.route("/")
def init():
return render_template('index.html')
@app.route("/", methods=['POST'])
def load():
th = Thread(target=something, args=())
th.start()
return render_template('loading.html')
def something():
#do some calculation and return the needed value
if __name__ == "__main__":
app.run()
どうすればよいルートrender_template('output.html', x=score)
に私のアプリのスレッド内のsomething()
th
終了すると?
私はこのアプリケーションをWebにデプロイしたいので、私はredisのようなタスクキューを避けようとしていますが、これは実験と趣味の多くです。私はフラスコかつ簡単な方法は、あなたの現在実行中のタスクに関する情報を提供します thread_statusエンドポイントへの巡回Ajaxリクエストを行っている
これは私が望んでいたのと同じように機能します!ありがとう!なぜ私は前にjavascript関数を書くことを考えなかったのだろうか – Apara