1
如果您向Django应用程序发出长时间运行的http请求,您是否可以发送第二个请求与其通信?你可以在请求之间共享数据吗?请求处理程序如何在Django中进行通信?
主塔有一个应用程序全局的概念。 node.js中的顶级变量都是应用程序全局变量。我如何在Django中做到这一点?
如果您向Django应用程序发出长时间运行的http请求,您是否可以发送第二个请求与其通信?你可以在请求之间共享数据吗?请求处理程序如何在Django中进行通信?
主塔有一个应用程序全局的概念。 node.js中的顶级变量都是应用程序全局变量。我如何在Django中做到这一点?
这通常被认为是一个坏主意,所以我要告诉你它通常会如何完成。大多数情况下,长时间运行的任务应分配到后台,并将该任务的更新放入全局存储区(例如数据库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计时器,并在需要它扑通到页面中。
是的,这是正确的做法。看看为你管理这种事情的[芹菜](http://celeryproject.org/)。 – 2010-04-19 21:30:21