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

时间:2015-09-08 10:50:31

标签: python django heroku celery

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我认为芹菜是一种很好的方法。不确定你是否需要Redis / RabbitMQ作为经纪人,或者你可以只使用MySQL - 这取决于你的任务。 Celery worker可以在不同的服务器上运行,因此Celery支持分布式队列。

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

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

答案 1 :(得分:0)

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