• Celery笔记


    Celery消息队列

      celery是一个基于分布式消息传输的异步任务队列,在后台启动celery之后,只要项目有任务就可以需要的数据扔给celery来处理就行了

    简单的例子:

    #app_test.py
    from celery import Celery
    
    app = Celery('', include=['tasks'])
    app.config_from_object('config')
    
    if __name__ == '__main__':
        app.start()
    #config.py
    BROKER_URL = 'redis://localhost' # 使用Redis作为消息代理
    
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 把任务结果存在了Redis
    
    CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化和反序列化使用msgpack方案
    
    CELERY_RESULT_SERIALIZER = 'json' # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON
    
    CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间
    
    CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的内容类型
    #diaoyong.py
    from tasks import add
    import time
    
    t1 = time.time()
    
    r1 = add.delay(1, 2)
    r2 = add.delay(2, 4)
    r3 = add.delay(3, 6)
    r4 = add.delay(4, 8)
    r5 = add.delay(5, 10)
    print('还没开始')
    r_list = [r1, r2, r3, r4, r5]
    print(r1)
    for r in r_list:
        while not r.ready():
            pass
    
        print(r.result)
    
    t2 = time.time()
    
    print('共耗时:%s' % str(t2-t1))
    #tasks.py
    #必须叫tasks
    import time
    from app_test import app
    
    @app.task
    def add(x, y):
        time.sleep(1)
        return x + y

    运行

      1.查看配置文件并启动redis

      2.

    celery -A 应用路径 worker -l 日志级别

     运行调用 python diaoyong.py发现not enough values to uppack

     查了资料发现windows版本会出现问题

    解决:

    pip install eventlet

      celery -A app_test worker -l info -P eventlet

    再次运行

    版权声明:本文原创发表于 博客园,作者为 RainBol 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

  • 相关阅读:
    vim的分屏功能
    vim进阶
    VIM常用快捷键
    vim操作:打开多个文件、同时显示多个文件、在文件之间切换
    vim 如何复制文件中多行到另一个文件
    无限分类左右值算法的常规操作逻辑
    js查看Object对象的内容
    js获取当前页面的url信息
    javascript获取url中的参数值
    解决Eclipe安装不上android的ADT的办法
  • 原文地址:https://www.cnblogs.com/RainBol/p/11941739.html
Copyright © 2020-2023  润新知