这通常被认为是个坏主意,所以我将向你展示通常是如何做到的。大多数情况下,长时间运行的任务应该被转移到后台,来自该任务的更新会被放在全局存储中(比如你的数据库,
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计时器上,并根据需要将其放到页面中。