如何在脚本完成之前返回HttpResponse?

时间:2012-05-02 17:13:25

标签: python django

我目前正在用django编写一个web应用程序,现在在我的主页面上放一个按钮,它将打开一个新的浏览器窗口并运行一个python脚本。现在脚本大约需要5分钟才能完成。如何在此之前返回响应,以便用户知道发生了什么事情并且只需要一些时间。这是views.py即时使用的部分。

感谢您的帮助!

def redoScan(request):
   main()
   return HttpResponse("Submitted new scan job. New data will be displayed on main page in 5 minutes")

3 个答案:

答案 0 :(得分:0)

您可以返回HttpResponse并添加异步任务。 使用celary或cron或其他任务管理器

答案 1 :(得分:0)

您可以使用django-celery等消息队列。你可以告诉它已经有一个简单的django集成。 Celery允许您异步地将“任务”传递给要处理的消息队列。这将允许用户开始时间密集的过程,而无需等待它们。

http://mathematism.com/2010/02/16/message-queues-django-and-celery-quick-start/

正如pahaz所建议的那样,cron也可用于汇总数据。如果您定期为每个用户执行相同的计算。然后,这可以很容易地转换为自定义管理命令,并且数据可以存储在itermediary表中。这样,用户只需要查找数据,而不必等待处理数据。

答案 2 :(得分:0)

好吧,我实际上已经使用Javascript来在屏幕上写一个状态,然后我调用一个AJAX函数,它将在扫描完成后发布新状态。这实际上并不坏,因为我使用AJAX无论如何都不是什么大问题。之前应该想到这一点。

无论如何,谢谢你们的帮助!