• 首页轮播图的异步更新


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

    展示效果:

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

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

  • 相关阅读:
    Hadoop学习之编译eclipse插件
    js堆栈溢出错误
    java——推断日期是否在今天之前
    AlertDialog.Builder中的setMultiChoiceItems中的事件处理
    Qemu之Network Device全虚拟方案二:虚拟网卡的创建
    【Android Tricks 6】ViewPager首页与尾页的滑动动作响应
    JFinal开发web项目出现故障小记
    HDU-4407-Sum(容斥原理)
    自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令
    待字闺中之巧妙排序分析:
  • 原文地址:https://www.cnblogs.com/surpass123/p/13386967.html
Copyright © 2020-2023  润新知