这个问题坑了我一晚上没睡好,翻了大量文档/Github/源码,终于解决了,记录以下
使用django_celery_beat
做异步任务、定时任务和周期任务管理,异步任务、周期任务执行都正常,唯独定时任务会延迟8小时执行
经验告诉我们遇到延迟8小时的大概率是因为时区的问题,但翻遍了文档,时区相关的配置都已添加仍然没用
# pip3 list | grep celery
celery 5.2.7
django-celery-beat 2.2.1
实际上涉及到的版本较多,不止我这里这个版本会出现,我测试了其他一些版本也都有这个问题,官方没修复
修改源码文件django_celery_beat/clockedschedule.py
,以下这段
class clocked(schedules.BaseSchedule):
"""clocked schedule.
Depends on PeriodicTask one_off=True
"""
def __init__(self, clocked_time, nowfun=None, app=None):
"""Initialize clocked."""
self.clocked_time = maybe_make_aware(clocked_time)
super().__init__(nowfun=nowfun, app=app)
改为:
class clocked(schedules.BaseSchedule):
"""clocked schedule.
Depends on PeriodicTask one_off=True
"""
def __init__(self, clocked_time, nowfun=None, app=None):
"""Initialize clocked."""
from .utils import make_aware
self.clocked_time = make_aware(clocked_time)
# self.clocked_time = maybe_make_aware(clocked_time)
super().__init__(nowfun=nowfun, app=app)
问题即可解决