虽然您可以让django应用在系统上添加和删除cron作业,但另一种更像django式的方法是使用Celery。它是一个任务队列系统,可以同时运行同步任务和异步任务。
Celery的一项特定功能是计划任务:http : //packages.python.org/celery/userguide/periodic- tasks.html
from datetime import timedelta
CELERYBEAT_SCHEDULE = {
"runs-every-30-seconds": {
"task": "tasks.add",
"schedule": timedelta(seconds=30),
"args": (16, 16)
},
}
它们还具有周期任务的更细化版本,该版本复制了crontab的调度:
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
# Executes every Monday morning at 7:30 A.M
'every-monday-morning': {
'task': 'tasks.add',
'schedule': crontab(hour=7, minute=30, day_of_week=1),
'args': (16, 16),
},
}
芹菜本身是独立的,但是有针对Django芹菜的版本
此解决方案的好处是您无需编辑和维护系统级的cron选项卡。此解决方案已高度集成到django中,用于此确切用途。
使用cron的另一个 好处就是Celery可以随您的系统扩展。如果使用的是基本系统crontab,则这些任务将位于承载该应用程序的服务器上。但是,如果您需要扩展站点并在5个Web应用程序节点上运行它怎么办?您将需要集中该crontab。如果您使用的是Celery,则有许多关于如何传输和存储任务的选项。它固有地是分布式的,并且可以同步到所有应用程序服务器。它是便携式的。