在Django中,celery任务完成后更新UI的最佳方法是什么?
我想让用户点击一个按钮来生成报告,显示一个生成报告的动画,然后在报告生成完成后,页面上显示“成功”这个字。
我在考虑,当用户点击生成报告的按钮时,创建一个celery任务。那我该如何在任务完成后更新用户界面呢?我是不是应该通过AJAX不断检查任务是否完成?有没有更好的方法或者在Django中可以帮助这个过程的第三方通知应用呢?
谢谢!
编辑:我做了更多的研究,发现的唯一方法是使用django-angular
和django-websocket-redis
进行三方数据绑定。感觉为了这个小功能有点过于复杂了。我想如果没有web sockets,唯一的办法就是每隔一段时间不断地向后台请求,检查任务是否完成。还有其他想法吗?
2 个回答
0
轮询是一种简单而有效的解决方案。对于一些简单的功能,尽量不要给你的网站增加不必要的负担。
while Result.state == u'PENDING':
#do your stuff
if Result.state == u'SUCCESS':
#Finished
else:
#something wrong
1
需要注意的是,轮询意味着你会保持请求和连接一直打开。在访问量很大的网页应用中,这样会浪费很多资源。不过,对于一些小网站来说,保持连接打开可能就没那么严重。建议你选择一种现在最容易实现的策略,以后如果真的遇到性能问题,再进行调整也不迟。