在Django模板中将celery任务的结果返回给客户端

时间:2018-04-05 20:17:06

标签: django redis django-celery

所以我试图完成以下任务。用户浏览网页,在sime时间有一个任务在后台运行。任务完成后,应返回args args flag: True之一,以便触发javascript,javascript显示模式表单。

我在没有异步任务之前测试过它并且它可以工作,但现在使用celery它只是将结果存储在数据库中。我做了一些关于龙卷风芹菜和相关的东西的研究,但是龙卷风的一些组件已经不再用了,所以在我看来使用它不会是老虎钳。

那么我的选择是什么,谢谢?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您希望将服务器端的某些内容传达回客户端。您通常有三种选择:

1)向服务器发出一个很长的待处理请求 - 有点不好。跳过细节,如果没有配置处理它,它将使你的网络服务器陷入困境,它会使你的网站在性能测试中得分低,如果请求失败,一切都会失败。
2)以大量请求轮询服务器,时间间隔(0.2秒,类似) - 更好。它会增加流量,但请求会很小,不会对网站的性能造成太大影响。如果您设置较长的间隔以不使用无意义的请求加载服务器,则用户将看到数据有一点延迟。在好的情况下,即使连接中断,也不会失败(如果写得正确) 3)Websockets,服务器可以在需要的时候用任何消息命中客户端 - 很好,但需要一些时间来习惯。如果你想尝试,你可以使用django-channels这是一个很好的Django websockets库。

如果我没有正确理解你并且这不是问题,你正在想办法如何将数据从Celery任务恢复到Django,那么你可以存储Celery任务ID-s并使用ID-s首先检查,如果任务完成,然后从Celery查询数据。