【问题标题】:Asynchronous view with client update for long running processes / views带有客户端更新的异步视图,用于长时间运行的进程/视图
【发布时间】:2012-09-26 08:01:00
【问题描述】:

我的应用中有一个视图可能需要很长时间才能在请求时提供给客户端。为了通知用户服务器正在工作,我想向用户展示一些类似进度条的东西,但它并不是真正的进度条,它更像是这样的:

a) 客户端正在请求 /myapp/longrunningview/

b) 服务器返回部分 h​​tml 端,包括一些看起来服务器正在工作的动画。同时服务器正在计算剩余的响应,这个过程需要很长时间

c) 服务器完成并将响应返回给客户端

d) 在客户端呈现响应

这并不是一个真正的进度条,因为用户可能会从我的应用程序之外的页面请求此页面,并且我想立即向用户返回一些内容,而无需等待整个过程完成。我发现的进度条实现都是基于某种形式发送到服务器,而客户端显示进度条,同时等待响应。

【问题讨论】:

    标签: django asynchronous progress-bar


    【解决方案1】:

    我会为这类事情使用芹菜任务。当用户发出请求时,启动任务,然后发回一个带有进度微调器或其他内容的页面,然后每隔几秒钟让一段 AJAX 访问服务器,询问它是否完成,或者使用 socketio 和 django-socketio 或类似的包向客户端推送“完成”通知,然后可以将您重定向到您需要去的任何地方。

    资源:

    【讨论】:

    • 谢谢,我去看看。会让这个问题有点悬而未决。也许还有其他一些更轻量级的方法。
    • 您绝对可以通过向该人发送电子邮件或使用定期 ajax 请求来摆脱使用 SocketIO,但 celery 是 Django 中使用的事实上的任务运行器,而且 IMO 非常简单设置并开始工作。
    • 谢谢,试试芹菜。
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多