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