celery定时任务
注意:不论是定时任务,还是普非定时任务,都需要启动worker,别忘记。(〃>目<)
老方法
# 1 配置文件 celery.py中 不是settings.py中!!!
# 时区
app.conf.timezone = 'Asia/Shanghai'
# 是否使用UTC
app.conf.enable_utc = False
# 任务的定时配置
from datetime import timedelta
from celery.schedules import crontab
app.conf.beat_schedule = {
# add-task 这个名称可以随便写
'add-task': {
# 导入到具体的函数 注意 是导入到具体的任务函数!
'task': 'celery_task.user_task.add',
'schedule': timedelta(seconds=3),
# 'schedule': crontab(hour=8, day_of_week=1), # 每周一早八点
'args': (300, 150),
},
'send-sms-task': {
'task': 'celery_task.order_task.send_sms',
# 'schedule': timedelta(seconds=30),
'schedule': crontab(hour=11,minute=20), # 每天11点20执行
'args': ('189232222',888),
},
}
# 2 启动beat 定时任务是用beat
celery -A celery_task beat -l debug
# 3 启动worker
celery -A celery_task worker -l debug -P eventlet # 别忘记这一步!!!
新方法
settings.py
# settings.py
# celery配置
CELERY_BROKER_URL = 'redis://localhost:6379/1'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'
# celery官方方案的定时任务
from datetime import timedelta
CELERY_BEAT_SCHEDULE = {
'update-banner': {
# 'task': 'luffy_api.apps.home.tasks.update_banner',
'task': 'home.tasks.update_banner',
'schedule': timedelta(seconds=10), # 间隔时间
'args': (), # 需要传递的参数
},
# 其他定时任务...
}
celery.py
from celery import Celery
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffy_api.settings.dev")
import django
django.setup()
from django.conf import settings
app = Celery("luffy_api")
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
tasks.py
from django.core.cache import cache
@shared_task
def update_banner():
banner_instance = Banner.objects.filter(is_delete=False, is_show=True).order_by('orders')[0:settings.BANNER_COUNT]
serializer = BannerSerizlizer(instance=banner_instance, many=True)
# serializer.data 返回的是经过序列化的数据。
for item in serializer.data:
item['image']=settings.BASE_URL+ item['image']
cache.set("banner_list", serializer.data)
return '轮播图缓存更新成功'