【问题标题】:Improving the user experiense of a slow Flask view改善慢速 Flask 视图的用户体验
【发布时间】:2016-03-09 14:41:47
【问题描述】:

我有一个锚标记,该标记命中在新选项卡中生成报告的路线。我正在延迟加载报告规范,因为我不想在原始位置和报告对象上拥有我的数据副本。但收集这些数据需要 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 完成后,加载报告。

【问题讨论】:

  • 运行时间超过几秒的作业对于像 celery 这样的任务队列来说是很好的工作。

标签: python flask server-response


【解决方案1】:

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

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

通常的解决方案包括添加异步属性并在单独的进程中处理您的数据。人们经常为此使用像Celery 这样的调度程序。

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

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

  • HTTP 视图总是返回最后缓存的版本

这个,或者然后让你的观点做一个AJAX call via JavaScript(“微调方法”)。这需要获得一些基本的 JavaScript 技能。然而,这并没有让最终用户更快地看到结果 - 它只是用户体验烟雾和镜子。

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 2013-10-31
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2018-09-26
    相关资源
    最近更新 更多