代码之家  ›  专栏  ›  技术社区  ›  Nick Retallack

请求处理程序如何在Django中通信?

  •  1
  • Nick Retallack  · 技术社区  · 14 年前

    如果您向Django应用程序发出一个长期运行的http请求,您是否可以发送第二个请求来与之通信?您能在请求之间共享数据吗?

    Pylons有一个应用程序全局的概念。node.js中的顶级变量都是应用程序全局变量。我在Django怎么做?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Jack M.    14 年前

    这通常被认为是个坏主意,所以我将向你展示通常是如何做到的。大多数情况下,长时间运行的任务应该被转移到后台,来自该任务的更新会被放在全局存储中(比如你的数据库, memcached ,或类似产品)。这可以防止前端服务器因太多请求而陷入困境。

    django cache backends

    def long_running_task(number):
        cache.set("long_running_task_progress", 0, 60*60) # Store for 1 hour.
        for x in range(0, number):
            huge_calculation(number)
            cache.set("long_running_task_progress", (x / number), 60*60)
        cache.delete("long_running_task_progress")
    
    def check_long_task(request):
        percent = cache.get("long_running_task_progress")
        if percent is None:
            return HttpResponse("There is no task running!")
        else:
            return HttpResponse("The task is %.2f percent complete." % (percent * 100))
    

    只需将后者加载到AJAX计时器上,并根据需要将其放到页面中。