虽然您可以让 django 应用程序在系统上添加和删除 cron 作业,但另一种更 django 风格的方法是使用Celery http://pypi.python.org/pypi/django-celery/。它是一个任务队列系统,可以运行同步和异步任务。
Celery 的一项具体功能是计划任务:http://packages.python.org/celery/userguide/periodic-tasks.html 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 芹菜 http://pypi.python.org/pypi/django-celery/具体版本
该解决方案的好处是您不需要编辑和维护系统级 cron 选项卡。这是一个高度集成到 django 中的解决方案,用于此用途。
Also a huge使用 cron 的优势在于 Celery 可以随您的系统进行扩展。如果您使用的是基本系统 crontab,那么任务将位于托管应用程序的服务器上。但是,如果您需要提升站点并在 5 个 Web 应用程序节点上运行它该怎么办?您需要集中该 crontab。如果你使用 Celery,你有一个大量的选择 http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html了解如何运输和存储任务。它本质上是分布式的,并且可以与所有应用程序服务器同步。它是便携式的。