2010-04-19 68 views
1

如果您向Django应用程序发出长时间运行的http请求,您是否可以发送第二个请求与其通信?你可以在请求之间共享数据吗?请求处理程序如何在Django中进行通信?

主塔有一个应用程序全局的概念。 node.js中的顶级变量都是应用程序全局变量。我如何在Django中做到这一点?

回答

3

这通常被认为是一个坏主意,所以我要告诉你它通常会如何完成。大多数情况下,长时间运行的任务应分配到后台,并将该任务的更新放入全局存储区(例如数据库memcached或类似的地方)。这可以防止您的前端服务器因请求过多而陷入困境。

使用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计时器,并在需要它扑通到页面中。

+1

是的,这是正确的做法。看看为你管理这种事情的[芹菜](http://celeryproject.org/)。 – 2010-04-19 21:30:21

相关问题