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 回答