【问题标题】:What is the best way to update the UI when a celery task completes in Django?在 Django 中完成芹菜任务时更新 UI 的最佳方法是什么?
【发布时间】:2014-06-10 11:22:09
【问题描述】:

我希望用户能够单击一个按钮来生成报告,向他显示生成报告的动画,然后在报告完成生成后,在页面上显示成功一词。

我正在考虑在单击生成报告按钮时创建一个 celery 任务。任务结束后更新 UI 的最佳方式是什么?如果任务已完成,我是否应该经常通过 AJAX 调用进行检查?在 Django 中是否有更好的方法或第三方通知类型的应用程序可以帮助完成此过程?

谢谢!

编辑:我做了更多的研究,我唯一能找到的是django-angulardjango-websocket-redis 的三路数据绑定。对于这个小功能,似乎有点矫枉过正。我想如果没有网络套接字,唯一可能的方法是每 x 秒不断轮询后端以检查任务是否已完成。还有什么想法吗?

【问题讨论】:

    标签: python django asynchronous celery django-celery


    【解决方案1】:

    请注意,轮询意味着您将保持请求和连接处于打开状态。在具有大量点击的 Web 应用程序上,这将浪费大量资源。但是,在较小的网站上,打开的连接可能没什么大不了的。选择一个现在最容易实施的策略,以便您以后在实际遇到性能问题时进行更改。

    【讨论】:

      【解决方案2】:

      轮询是一个很好且简单的解决方案。避免为您的网站增加不必要的简单功能开销。

      while Result.state == u'PENDING':
        #do your stuff
      
      if Result.state == u'SUCCESS':
        #Finished
      else:
        #something wrong
      

      【讨论】:

        猜你喜欢
        • 2012-08-30
        • 2020-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多