首页轮播图的异步更新

基于分布式异步框架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

djangocelery是两个独立的框架体系,如何在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

首页轮播图的异步更新

展示效果:

首页轮播图的异步更新

修改数据库,将原先删除的图片恢复,一分后,展示效果如下:

首页轮播图的异步更新

这里只是做轮播图的定时更新,在实际的开发场景中,需要后台一修改,就起个异步任务更新缓存

相关推荐