【问题标题】:django-celery-beat spams due tasksdjango-celery-beat 垃圾邮件到期任务
【发布时间】:2022-01-22 23:23:32
【问题描述】:

我将django-celery-beat 用于一些每小时/每天的任务。然而,奇怪的行为让我不知所措。

我正在使用这段代码创建一个任务:

    periodic_task = apps.get_model('django_celery_beat', 'PeriodicTask')
    interval_schedule = apps.get_model('django_celery_beat', 'IntervalSchedule')

    schedule, _ = interval_schedule.objects.get_or_create(every=2, period='hours')

    periodic_task.objects.update_or_create(
        task=TASK,
        defaults={'name': '<task description>', 'interval': schedule},
    )

其中TASK 是指向此任务的字符串:

@app.task(ignore_result=True)
def task():
    <things to do>
    pass

在你看到的代码中我使用了2小时的间隔,一旦我用celery -A [project-name] beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler开始节拍,就没有弹出错误(我不知道它是否真的有效,2小时是很多时间)。但是,当我将时间间隔更改为 1 小时时,它会发送以下垃圾邮件:

[2021-12-21 15:32:45,333: INFO/MainProcess] Task app.tasks.task[6c0343b0-faf1-4eae-a8e0-721c862120a9] succeeded in 0.0s: None
[2021-12-21 15:32:45,336: INFO/MainProcess] Scheduler: Sending due task <task description> (app.tasks.task)

然后它会一直持续到永恒,只能通过 Ctrl+C 停止。

我确实安装了 RabbitMQ 管理插件,并且从 UI 看起来一切都很好 - 没有队列,没有任何未确认的内容等。任何线索这可能导致什么?

即使在清除队列之后,它仍然会发生(使用celery -A [project-name] purge)。

【问题讨论】:

    标签: django celery django-celery-beat


    【解决方案1】:

    更新,我在这里找到了答案:https://github.com/celery/django-celery-beat/issues/95。我的TIME_ZONE 设置是错误的(仍然设置为 UTC 而不是我的实际时区,欧洲/阿姆斯特丹),所以我想这就是它搞砸的地方。

    【讨论】:

      猜你喜欢
      • 2021-02-25
      • 2018-09-17
      • 2018-12-18
      • 2020-05-27
      • 2019-11-15
      • 2021-08-30
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      相关资源
      最近更新 更多