虽然您可以让您的 django 应用程序在系统上添加和删除 cron 作业,但另一种更 django-ish 的方法是使用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-celery特定的版本
此解决方案的好处是您无需编辑和维护系统级 cron 选项卡。这是一个高度集成到 django 中的解决方案,用于此确切用途。
使用 cron 的另一个巨大优势是 Celery 可以随您的系统扩展。如果您使用的是基本系统 crontab,那么任务将位于托管应用程序的服务器上。但是,如果您需要扩展您的网站并在 5 个 Web 应用程序节点上运行它怎么办?您需要集中该 crontab。如果您使用的是 Celery,您有很多关于如何传输和存储任务的选项。它本质上是分布式的,并且可以同步到您的所有应用程序服务器。它是便携式的。