代码之家  ›  专栏  ›  技术社区  ›  furang

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

  •  0
  • furang  · 技术社区  · 8 年前

    因此,我正在努力实现以下目标。用户浏览网页时,有一个任务正在后台运行。任务完成后,应返回 args 其中一个 参数 flag: True 为了触发一个javascript,javascript显示了一个模态形式。

    我以前在没有异步任务的情况下对它进行了测试,它可以工作,但现在使用芹菜,它只将结果存储在数据库中。我对龙卷风芹菜和相关的东西做了一些研究,但像龙卷风redis这样的一些组件已经不再被覆盖,所以我认为使用它不会是虎钳。

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

    1 回复  |  直到 8 年前
        1
  •  3
  •   wanaryytel    8 年前

    如果我理解正确,那么您需要从服务器端向客户端传递一些信息。您通常有三种选择:

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

    如果我没有正确理解您,并且这不是当前的问题,并且您正在考虑如何将数据从芹菜任务返回到Django,那么您可以存储芹菜任务ID-s并使用ID-s首先检查任务是否完成,然后从芹菜中查询数据。