kaixinfelix 2020-07-27
celery
前文已知,celery可以执行异步任务、延时任务、定时任务。
broker:‘redis://127.0.0.1:6379/2‘ # 消息队列(中间件) broker 可以使用Redis、RabbitMQ backend:‘redis://127.0.0.1:6379/3‘ # 任务结果仓库
celery_task
的目录结构# 在项目根目录下新建celery_task文件 # 目录结构如下: -celery_task -celery.py # celery_task包下面必须有个名为celery的py文件 -task_3.py # 任务 -__init__.py
celery.py
在django
中如何使用celery
django
和celery
是两个独立的框架体系,如何在django
中使用celery执行定时任务,或者异步任务了
# 分布式异步框架celery的配置 # 加载django配置环境 import os os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘luffyapi.settings.dev‘) # 加载celery配置环境 from celery import Celery # broker&backend&worker broker = ‘redis://127.0.0.1:6379/2‘ backend = ‘redis://127.0.0.1:6379/3‘ app = Celery(__name__, broker=broker, backend=backend, include=[‘celery_task.task_3‘, ]) # worker # 时区设置,是否启用UTC app.conf.timezone = ‘Asia/Shanghai‘ app.conf.enable_utc = False # 定时任务的配置 from datetime import timedelta app.conf.beat_schedule = { ‘add-task‘: { ‘task‘: ‘celery_task.task_3.flush_banner‘, ‘schedule‘: timedelta(seconds=60), # ‘schedule‘: crontab(hour=8, day_of_week=1), # 每周一早八点 # ‘args‘: (log_path, new_path), } }
task_3.py
from .celery import app from django.core.cache import cache from home import models,serializer from django.conf import settings @app.task def flush_banner_cache(): queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by(‘order‘)[ :settings.BANNER_COUNTER] banner_list = serializer.BannerModelSerializer(queryset, many=True).data for banner in banner_list: banner[‘img‘] = ‘http://127.0.0.1:8015/%(url)s‘ % {‘url‘: banner[‘img‘]} cache.set(settings.BANNER_LIST_CACHE, banner_list,60)
执行定时任务:
windows下启动worker # 启动worker celery worker -A celery_task -l info -P eventlet # 添加任务 celery beat -A celery_task -l info
展示效果:
修改数据库,将原先删除的图片恢复,一分后,展示效果如下:
这里只是做轮播图的定时更新,在实际的开发场景中,需要后台一修改,就起个异步任务更新缓存