zoukankan      html  css  js  c++  java
  • 首页轮播图的异步更新

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

    展示效果:

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

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

  • 相关阅读:
    Oracle SQL 函数
    j2me MIDP2.0 下实现split函数
    Linux Oracle 增量恢复时错误 ORA19573: 无法获得 exclusive 入队 (数据文件 5 的)
    Linux Oracle10 建立归档模式的详细过程
    j2me MIDP2.0 下实现的图片缩放函数
    linux下oracle10g建立归档模式 接连出现错误:ORA19905 ORA01078 LRM00109
    j2me下 触摸屏的开发 NetBeans 模拟器支持触摸屏
    高级程序员:你不可不知的20条编程经验(转载)
    生成规定大小的图片(缩略图生成)
    asp.net简单实现用button做按钮图片
  • 原文地址:https://www.cnblogs.com/surpass123/p/13386967.html
Copyright © 2011-2022 走看看