当Django中的芹菜任务完成时,更新UI的最佳方法是什么?

时间:2014-04-24 22:59:49

标签: python django asynchronous celery django-celery

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

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

谢谢!

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

2 个答案:

答案 0 :(得分:0)

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

while Result.state == u'PENDING':
  #do your stuff

if Result.state == u'SUCCESS':
  #Finished
else:
  #something wrong

答案 1 :(得分:0)

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