zoukankan      html  css  js  c++  java
  • 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 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

  • 相关阅读:
    System.Web.Security下提供了非常简单的MD5加密算法,但处在非Web层的项目要怎么使用MD5加密呢?
    切换用户账户访问共享 记
    从盛大通行证上摘下来的身份证验证代码
    HA_Xenu1.3.6 使用手记
    asp.net跨域共享session(不能跨主机名)
    应用程序池自动关闭
    忘记 win2003 密码 记
    Ajax 入门 【学习手记】
    转载 防盗链
    超链接的 target
  • 原文地址:https://www.cnblogs.com/RainBol/p/11941739.html
Copyright © 2011-2022 走看看