【问题标题】:Django celery task that will execute every day from 00:00 to 02:00每天从 00:00 到 02:00 执行的 Django celery 任务
【发布时间】:2019-01-27 15:56:40
【问题描述】:

我需要设置 django celery 任务my_task,它将在此期间每天从 00:00 到 02:00 执行,间隔 5 分钟。似乎无法通过django-celery-beat 在管理员中设置此任务。如何正确设置?

我需要类似的东西

celery_app.conf.beat_schedule = {
    'my_task_1': {
        'task': 'tasks.my_task',
        'schedule': crontab(minute=5),
        'start': crontab(hour=0, minute=0),
        'expires': crontab(hour=2, minute=0),
        'args': (".."),
    },
}

感谢您的宝贵时间。

【问题讨论】:

    标签: django celery django-celery


    【解决方案1】:

    Celery 的 crontab 调度类接受完整的 crontab 语法,这可能有点难以理解。这个配置应该做你想做的:

    celery_app.conf.beat_schedule = {
        'my_task_1': {
            'task': 'tasks.my_task',
            'schedule': crontab(hour="0-1", minute="*/5"),
            'args': (".."),
        },
    }
    

    注意:这不会在 2:00 运行任务。我认为实现这一目标的最简单方法是添加第二个时间表:

        'my_task_2am': {
            'task': 'tasks.my_task',
            'schedule': crontab(hour="2", minute="0"),
            'args': (".."),
        },
    

    【讨论】:

    • 美女。非常感谢!
    【解决方案2】:

    您可以运行 celerybeat 任务,该任务将运行另一个 celery 任务并执行以下操作:

    1. 检查当前时间是否在 00.00 - 02.00 区间
    2. 如果第 1 点为真,请按照您的逻辑进行操作
    3. 在 5 分钟内使用 apply_async 再次运行自身。

    你会得到什么,你的 celerebeat 任务将在 00.00 运行,启动你的另一个 celerey 任务,该任务将在 02.00 之前执行上述逻辑。

    【讨论】:

    • 谢谢你的想法!
    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 2013-03-23
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2018-02-04
    • 2020-09-04
    相关资源
    最近更新 更多