1

我目前正在用 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")
4

3 回答 3

0

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

于 2012-05-02T18:08:56.383 回答
0

您可以使用消息队列,例如 django-celery。如您所知,它已经有一个简单的 django 集成。Celery 允许您将“任务”异步传递到要处理的消息队列。这将允许用户开始时间密集的过程,而不必等待他们。

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

正如 pahaz 所建议的,一个 cron 也可以用于聚合数据。如果您定期为每个用户进行相同的计算。然后可以轻松地将其转换为自定义管理命令,并将数据存储在中间表中。这样,用户只需查找数据,而不必等待数据被处理。

于 2012-05-02T19:02:12.743 回答
0

好吧,我现在实际上已经使用 Javascript 在屏幕上写了一个状态,然后我调用了一个 AJAX 函数,该函数将在扫描完成后发布新的状态。这实际上并没有那么糟糕,因为我使用 AJAX 反正没什么大不了的。早该想到的。

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

于 2012-05-18T15:18:56.097 回答