您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Django中每天一次在确切时间执行命令?

如何在Django中每天一次在确切时间执行命令?

虽然您可以让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,则有许多关于如何传输和存储任务的选项。它固有地是分布式的,并且可以同步到所有应用程序服务器。它是便携式的。

Go 2022/1/1 18:47:18 有336人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶