如何处理需要花费很长时间才能运行的请求?

时间:2013-02-25 03:16:13

标签: python django

我正在使用Django开发分类器服务,用户可以使用类似http://localhost/api/buildmodel的api构建模型,但是,因为构建模型需要很长时间,可能需要2个小时,而且我正在使用web页面显示构建模型的结果。如何设计我的Django程序立即返回并做一些事情来建立完成后显示结果?也许我可以使用ajax但我想在Python中实现它,比如使用异步方法并在构建后调用回调函数,任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:3)

您需要使用任务队列管理器。到目前为止,Celery是Django最受欢迎的任务管理器。这个想法是你给这个经理一个任务,然后它处理任务,一旦完成,它就可以激活一个回调函数。在回调函数中,您可以运行逻辑来通知用户任务已完成。

答案 1 :(得分:0)

这样做的一种方法是在任务中为持久数据库(或redis键/值对)创建一行,该任务表示它是在运行还是已完成。让代码设置任务启动时要运行的值,并在任务完成时完成。然后让AJAX调用对URL进行GET查找,该URL通过Web服务发送任务的状态。您可以将其放在setInterval()中以定期轮询数据库以查看是否已完成。您可以在完成时发送电子邮件,也可以只有一个登录页面/仪表板,显示正在运行的任务的状态。