我有一个锚标记,它会命中一个在新标签中生成报告的路径。我懒得加载报表规范,因为我不希望在原始位置和报表对象上拥有我的数据副本。但是收集这些数据需要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完成时,加载报告。
答案 0 :(得分:0)
你是对的:HTTP视图不适合长时间运行的任务。
您需要考虑您的系统架构:您可以在视图外准备什么以及在视图中必须实时进行哪些计算。
通常的解决方案包括添加异步属性并在单独的进程中处理数据。通常人们会使用Celery之类的调度程序。
在计划进程中准备数据,该进程例如在每10分钟
通过将结果存储在数据库中来缓存结果
HTTP视图始终返回上一个缓存版本
这个,或者让你的观点做AJAX call via JavaScript(“旋转方法”)。这需要获得一些基本的JavaScript技能。然而,这并不会使结果更快地显示给最终用户 - 这只是用户体验烟雾和镜子。