• django的实现异步机制celery


    celery

    一句话总结:celery是一种实现异步的机制,对于比较耗时的任务可以使用其来减少客户端等待时间(注册邮箱验证),提高用户体验。

    • 官方网站
    • 中文文档
    • 示例一:用户发起request,并等待response返回。在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验
    • 示例二:网站每小时需要同步一次天气预报信息,但是http是请求触发的,难道要一小时请求一次吗?
    • 使用celery后,情况就不一样了
    • 示例一的解决:将耗时的程序放到celery中执行
    celery==3.1.25
    celery-with-redis==3.0
    django-celery==3.1.17  
    • 示例二的解决:使用celery定时执行

    名词

    • 任务task:就是一个Python函数
    • 队列queue:将需要执行的任务加入到队列中
    • 工人worker:在一个新进程中,负责执行队列中的任务
    • 代理人broker:负责调度,在布置环境中使用redis

    使用

    • pip工具安装下面软件包
    celery==3.1.25
    celery-with-redis==3.0
    django-celery==3.1.17
    • 配置settings
    INSTALLED_APPS = (
      ...
      'djcelery',
    }
    
    ...
    
    import djcelery
    djcelery.setup_loader()  #负责初始化所有的task
    BROKER_URL = 'redis://127.0.0.1:6379/0' #broker负责任务调度(将任务加载到quene队列中或则讲队列中的任务取出来让worker执行,末尾的0代表使用0这个数据库)
    CELERY_IMPORTS = ('应用名称.task') #在哪个应用中使用celery
    • 在应用目录下创建task.py文件
    import time
    from celery import task
    
    @task #添加成为一个任务
    def sayhello():
        print('hello ...')
        time.sleep(2)
        print('world ...')
    • 迁移,生成celery需要的数据表
    python manage.py migrate #添加任务到队列
    • 启动Redis
    sudo redis-server /etc/redis/redis.conf
    • 启动worker 
    python manage.py celery worker --loglevel=info  #调度用
    • 调用语法
    function.delay(parameters) 
    • 使用代码
    #from task import *
    
    def sayhello(request):
        print('hello ...')
        import time
        time.sleep(10)
        print('world ...')
    
        # sayhello.delay()
    
        return HttpResponse("hello world") 
  • 相关阅读:
    跨域踩坑经验总结(内涵:跨域知识科普)
    Nginx location规则匹配
    CentOS 命令
    Centos 修改源
    Ubuntu下获取内核源码
    Ubuntu用户自定义脚本开机启动
    ubuntu 14.04安装x11VNC
    texi格式文件的读取
    更换主机后SSH无法登录的问题
    ubuntu操作系统的目录结构
  • 原文地址:https://www.cnblogs.com/alexzhang92/p/9529534.html
Copyright © 2020-2023  润新知