我一直在使用Django开发一个web应用程序,我很好奇是否有一种方法可以安排一个作业定期运行。

基本上,我只是想运行数据库,并在自动的、定期的基础上进行一些计算/更新,但我似乎找不到任何关于这样做的文档。

有人知道怎么设置吗?

澄清一下:我知道我可以设置一个cron作业来完成这个任务,但我很好奇Django中是否有一些特性提供了这个功能。我希望人们能够自己部署这个应用程序,而不需要做很多配置(最好是零配置)。

我曾经考虑过“回溯性”地触发这些操作,方法是简单地检查自上一次请求发送到站点以来作业是否应该运行,但我希望使用更简洁的方法。


当前回答

在代码部分之后,我可以像我的views.py一样写任何东西:)

#######################################
import os,sys
sys.path.append('/home/administrator/development/store')
os.environ['DJANGO_SETTINGS_MODULE']='store.settings'
from django.core.management impor setup_environ
from store import settings
setup_environ(settings)
#######################################

从 http://www.cotellese.net/2007/09/27/running-external-scripts-against-django-models/

其他回答

一个更现代的解决方案(与芹菜相比)是Django Q: https://django-q.readthedocs.io/en/latest/index.html

它有很好的文档,很容易理解。缺乏Windows支持,因为Windows不支持进程分叉。但是如果您使用Windows for Linux子系统创建您的开发环境,那么它工作得很好。

我们已经开源了我认为是一个结构化的应用程序,Brian的解决方案也提到了这一点。我们希望得到任何/所有的反馈!

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

它有一个管理命令:

./manage.py runcrons

这就行了。每个cron都被建模为一个类(所以它都是面向对象的),每个cron以不同的频率运行,我们确保相同的cron类型不会并行运行(以防cron本身的运行时间比它们的频率长!)

虽然不是Django的一部分,但气流是一个更近期的项目(截至2016年),用于任务管理。

风流是一个工作流自动化和调度系统,可用于创建和管理数据管道。基于web的UI为开发人员提供了一系列管理和查看这些管道的选项。

《气流》是用Python编写的,使用Flask构建的。

“气流”是由Airbnb的Maxime Beauchemin在2015年春天创建的开源软件。它在2016年冬天加入了Apache软件基金会的孵化计划。下面是Git项目页面和一些附加的背景信息。

我不确定这对任何人都有用,因为我必须提供系统的其他用户来调度作业,而不给他们访问实际的服务器(windows)任务调度器,我创建了这个可重用的应用程序。

请注意,用户可以访问服务器上的一个共享文件夹,在那里他们可以创建所需的命令/任务/.bat文件。这个任务然后可以使用这个应用程序安排。

应用程序名称为Django_Windows_Scheduler

截图:

如果你想要比芹菜更可靠的东西,可以尝试构建在AWS SQS/SNS之上的TaskHawk。

参见:http://taskhawk.readthedocs.io