【问题标题】:how to do with a request which needs to take a long time to run?如何处理需要很长时间才能运行的请求?
【发布时间】:2024-01-04 02:26:01
【问题描述】:

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

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        最近更新 更多