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

Returning the result of celery task to the client in Django template

所以我正在尝试完成以下任务。用户浏览网页,同时后台有一个任务运行。当任务完成时,它应该 return args 其中 args 之一是 flag: True 以触发 javascript 并且 javascript 显示模态形式.

我之前在没有异步任务的情况下测试过它并且它可以工作,但现在使用 celery 它只是将结果存储在数据库中。我对 tornado-celery 和相关的东西做了一些研究,但是像 tornado-redis 这样的一些组件不再被维护,所以我认为使用它是不合适的。

那么我有什么选择,谢谢?

如果我对你的理解是正确的,那么你想从服务器端向客户端传达一些信息。您通常有三个选择:

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

如果我没有正确理解你,这不是手头的问题,你正在想办法从 Celery 任务中获取数据到 Django,那么你可以存储 Celery 任务 ID-s 并使用ID-s 先检查,如果任务完成了再从Celery中查询数据。