0

新しいタブでレポートを生成するルートにヒットするアンカー タグがあります。元の場所とレポート オブジェクトにデータのコピーを置きたくないので、レポート仕様を遅延読み込みしています。しかし、そのデータの収集には 10 ~ 20 秒かかります。

from flask import render_template

@app.route('/report/')
@app.route('/report/<id>')
def report(id=None):
    report_specs = function_that_takes_20_seconds(id)
    return render_template('report.html', report_specs=report_specs)

サーバーがスピナーですぐに応答し、 function_that_takes_20_seconds が完了したら、レポートをロードするために何ができるか疑問に思っています。

4

1 に答える 1

0

その通りです。HTTP ビューは長時間実行されるタスクの場所ではありません。

システム アーキテクチャを考える必要があります。つまり、ビューの外で何を準備できるか、ビュー内でリアルタイムに実行する必要がある計算は何かです。

通常の解決策には、非同期プロパティを追加し、別のプロセスでデータを処理することが含まれます。多くの場合、これにはCeleryなどのスケジューラが使用されます。

  • たとえば 10 分ごとに実行されるスケジュールされたプロセスでデータを準備する

  • 結果をデータベースに保存してキャッシュする

  • HTTP ビューは常に最後にキャッシュされたバージョンを返します

これ、またはJavaScript を介して AJAX 呼び出しを行うビューを作成します(「スピナー アプローチ」)。これには、いくつかの基本的な JavaScript スキルを習得する必要があります。ただし、これによって結果がエンド ユーザーにより速く表示されるわけではありません。ユーザー エクスペリエンスは煙と鏡にすぎません。

于 2016-03-09T17:00:43.457 に答える