django-celery-beat 垃圾邮件到期任务
Posted
技术标签:
【中文标题】django-celery-beat 垃圾邮件到期任务【英文标题】:django-celery-beat spams due tasks 【发布时间】: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
)。
【问题讨论】:
【参考方案1】:更新,我在这里找到了答案:https://github.com/celery/django-celery-beat/issues/95。我的TIME_ZONE
设置是错误的(仍然设置为 UTC 而不是我的实际时区,欧洲/阿姆斯特丹),所以我想这就是它搞砸的地方。
【讨论】:
以上是关于django-celery-beat 垃圾邮件到期任务的主要内容,如果未能解决你的问题,请参考以下文章