改善用户体验缓慢的Flask视图

时间:2016-03-09 14:41:48

标签: python flask server-response

我有一个锚标记,它会命中一个在新标签中生成报告的路径。我懒得加载报表规范,因为我不希望在原始位置和报表对象上拥有我的数据副本。但是收集这些数据需要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完成时,加载报告。

1 个答案:

答案 0 :(得分:0)

你是对的:HTTP视图不适合长时间运行的任务。

您需要考虑您的系统架构:您可以在视图外准备什么以及在视图中必须实时进行哪些计算。

通常的解决方案包括添加异步属性并在单独的进程中处理数据。通常人们会使用Celery之类的调度程序。

  • 在计划进程中准备数据,该进程例如在每10分钟

  • 通过将结果存储在数据库中来缓存结果

  • HTTP视图始终返回上一个缓存版本

这个,或者让你的观点做AJAX call via JavaScript(“旋转方法”)。这需要获得一些基本的JavaScript技能。然而,这并不会使结果更快地显示给最终用户 - 这只是用户体验烟雾和镜子。