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

posted @ 2019-11-27 13:54  RainBol  阅读(124)  评论(1编辑  收藏  举报
Live2D