具有长时间运行计算的 Django 应用程序

Posted

技术标签:

【中文标题】具有长时间运行计算的 Django 应用程序【英文标题】:Django app with long running calculations 【发布时间】:2015-12-04 00:31:35 【问题描述】:

我正在创建一个 Django Web 应用程序,该应用程序可能具有长达一小时的长时间运行计算。计算是用 Python 构建的模拟模型。 Web 应用程序将输入发送到仿真模型,并在一段时间后收到答案。此外,用户应该能够在开始模拟后关闭浏览器,如果他在第二天登录,结果应该会出现。

根据我的研究,我似乎可以将 Celery 与 Redis/RabbitMQ 一起用作代理在后台运行计算。理想情况下,我希望使用 ajax 显示进度更新,以便在计算完成时页面更新而无需用户刷新。

我想在 Heroku 上托管应用程序,因此计算也将在 Heroku 服务器上运行。如果我想将计算引擎移到另一台服务器上会有多难?如果计算引擎在不同的服务器上,它可能会很有用。

所以我的问题是,这是我上面的一个好方法还是我可以查看哪些其他选项?

【问题讨论】:

【参考方案1】:

我认为 Celery 是一个很好的方法。不确定您是否需要 Redis/RabbitMQ 作为代理,或者您可以只使用 mysql - 这取决于您的任务。 Celery worker 可以运行在不同的服务器上,所以 Celery 支持分布式队列。

另一种方法 - 使用 python 实现一些队列引擎,数据库作为代理和用于作业执行的 cron。但这可能是一种肮脏的方式,会带来很多痛苦和错误。

所以我认为 Celery 是一种更好的方法。

【讨论】:

【参考方案2】:

如果你在 Heroku 上运行,你需要 django-rq,而不是 Celery。见https://devcenter.heroku.com/articles/python-rq。

【讨论】:

以上是关于具有长时间运行计算的 Django 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

重置长时间的 Django 迁移

RabbitMQ 保持连接运行很长时间

在 FastAPI 中有一个长时间运行的协程可以吗?

让 Shiny 更新 ui 并在之后运行长时间计算

长时间运行的Django进程可行吗?

迁移需要很长时间才能应用到数据库