首页 > 解决方案 > 定期用 celery 执行任务

问题描述

我正在尝试在 Django 中使用 celery 执行一项任务。我想在每天下午 12:30 执行该任务,为此我在我的 tasks.py 中写了这个

@periodic_task(run_every=crontab(minute=30, hour=12), name="elast")
def elast():
        do something


这不起作用,但如果我想每 30 秒安排一次,我会编写这段代码

@periodic_task(run_every=(timedelta(seconds=30)), name="elast")
def elast():
        do something

这行得通。我想知道第一段代码有什么问题?任何帮助将不胜感激。

标签: djangocelerydjango-celery

解决方案


根据最新的 celery 4.3 版本,在 12:30 pm 执行任务下面的代码将很有用 celery.py

from celery.schedules import crontab

app.conf.beat_schedule = {
    # Executes every day at  12:30 pm.
    'run-every-afternoon': {
        'task': 'tasks.elast',
        'schedule': crontab(hour=12, minute=30),
        'args': (),
    },
}

任务.py

import celery
@celery.task
def elast():
    do something

启动 celery beat scheduler celery -A proj worker -B

对于 celery 2.0 附近的旧版本

from celery.task.schedules import crontab
from celery.decorators import periodic_task

@periodic_task(run_every=crontab(hour=12, minute=30))
def elast():
    print("code execution started.")

请检查时区设置。

新用户指南

旧用户指南


推荐阅读