使用celery做定时任务时,出现一个错误,就是不执行定时任务。刚开始在在做测试时是每分钟测试,然后我发现并没有执行这个服务。于是在花费了定量时间,然后解决了这个bug。

celery定时任务bug

就是简单做celery定时任务时,我发现逻辑和代码并没有任何问题,但是就是不启动。
于是进行百度,刚开始说的是可能是celery版本的问题,但是发现并不是这个问题。

经过测试,我把crontab中的参数hour去掉,把minute设置每分钟,于是我发现每分钟都会执行。
所以可以确定是hour,也就是时区问题。但是机器上的时间和代码里面的时区都没有问题,那可能是celery本身的问题了。

原因

默认celery的时区为UTC

解决思路

将celery定时任务设置为根据本地时区触发

默认celery的时区为UTC,如果要在django项目中将celery定时任务配置为根据本地时区触发,则需要修改

在settings.py中添加以下代码

1
2
CELERY_TIMEZONE='Asia/Shanghai'
CELERY_ENABLE_UTC=False
定时任务代码附上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#定时任务
#导入celery定时模块
from celery.schedules import crontab
from celery import schedules
#导入时间模块
from datetime import timedelta


CELERY_TIMEZONE='Asia/Shanghai'
CELERY_ENABLE_UTC=False

# CELERY_BEAT_SCHEDULE = {
# #定义定时任务
# 'celery_datetime_work':{
# 'task':'myapp.tasks.async_test', #任务名称
# 'schedule':timedelta(seconds=60)
# }
# }

CELERY_BEAT_SCHEDULE = {
#定义定时任务
'celery_datetime_work':{
#天气预报结合钉钉机器人
'task': 'myapp.tasks.func', #我的celery任务
#定时任务每天8.30
'schedule': crontab(minute='30',hour=8),

}
}

评论





载入天数...载入时分秒...

Blog content follows the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License

Use WZH as theme, total visits times