Django – 设置计划任务?

我一直在使用Django开发一个web应用程序,我很好奇是否有办法安排一项工作定期运行。

基本上我只想运行数据库并自动定期进行一些计算/更新,但我似乎无法找到任何有关执行此操作的文档。

有谁知道如何设置?

为了澄清:我知道我可以设置一个cron工作来做到这一点,但我很好奇,如果在Django中有一些功能提供此功能。我希望人们能够自己部署这个应用程序,而无需做太多配置(最好是零)。

我曾考虑通过简单地检查自上次向网站发送请求之后是否应该运行一项工作来触发这些“追溯性”操作,但我希望能够让事情变得更加简洁。


我采用的一个解决方案是这样做的:

1)创建一个自定义管理命令,例如

python manage.py my_cool_command

2)使用cron(在Linux上)或at(在Windows上)在需要的时间运行我的命令。

这是一个简单的解决方案,不需要安装沉重的AMQP堆栈。然而,在其他答案中提到的使用像芹菜这样的东西有很多好处。特别是,使用Celery时,不必将应用程序逻辑分散到crontab文件中。但是,cron解决方案对于中小型应用程序非常适用,并且您不需要很多外部依赖项。

编辑:

在较新版本的Windows中at,Windows 8,Server 2012及更高版本不推荐使用该命令。您可以使用schtasks.exe相同的用途。


Celery是一个基于AMQP(RabbitMQ)的分布式任务队列。它也以类似cron的方式处理周期性任务(请参阅定期任务)。根据你的应用程序,它可能是值得的。

Celery使用django(docs)非常容易设置,并且在停机时间周期性任务实际上会跳过错过的任务。Celery还有内置的重试机制,以防任务失败。


我们已经开源了我认为是结构化的应用程序。Brian的解决方案也同样如此。会爱任何/所有的反馈!

https://github.com/tivix/django-cron

它带有一个管理命令:

./manage.py runcrons

这样做的工作。每个cron被建模为一个类(所以它的所有OO),每个cron以不同的频率运行,并且我们确保相同的cron类型不会并行运行(如果crons本身需要比它们的频率更长的时间运行)!

谢谢!

添加评论

友情链接:蝴蝶教程