我目前正在用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")
答案 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无论如何都不是什么大问题。之前应该想到这一点。
无论如何,谢谢你们的帮助!