美文网首页
Celery初级

Celery初级

作者: ZplD | 来源:发表于2019-03-15 12:02 被阅读0次

什么是Celery

Celery是管理分布式队列工具,可用于进行任务队列的使用和管理

Celery的结构

  • Brokers
    brokers为中间人,也就是任务队列,主要是用来存放和拿去任务的地方

  • backend
    backend主要是用来存放队列中的任务执行完后的结果或者状态

  • Wokers
    wokers是去执行任务队列里面的任务

  • Tasks
    tasks是我们要放入任务队列的任务

[图片上传失败...(image-e0868f-1552622464942)]

Celery的安装

apt-get install redis-server
pip install redis
pip install celery

测试Demo

#tasks.py
from celery import Celery
app = Celery('tasks',  backend='redis://localhost:6379/0', broker='redis://localhost:6379/0') #配置好celery的backend和broker
@app.task  #普通函数装饰为 celery task
def add(x, y):
    return x + y

终端运行celery -A tasks worker --loglevel=inf

#trigger.py
from tasks import add
result = add.delay(4, 4) #不要直接 add(4, 4),这里需要用 celery 提供的接口 delay 进行调用
while not result.ready():
    time.sleep(1)

print 'task done: {0}'.format(result.get())

运行该文件

错误问题处理

image.png

错误原因:python3.6后引进async关键词与celery下的一个模块名相同
解决方案:将所有有引用该模块的地方包括celery的async模块的名字都改为另外一个名字如async_2

image.png

错误原因:任务没被加入到队列中
解决方案:在@app.task()添加属性name='Demo.tasks.add'-》@app.task(name='Demo.tasks.add')

image.png

错误原因:网上说的错误原因是可能是windows10下运行celery所以报的错,但我的是windos7错误原因占时不明
解决方案:

  • 可行:终端运行命令改为celery -A tasks worker --pool=solo -l info(亲测可行)
  • windows10下:pip install eventlet,后终端运行命令改为celery -A <mymodule> worker -l info -P eventlet
    (eventlet下载失败,可行性未知)

相关文章

网友评论

      本文标题:Celery初级

      本文链接:https://www.haomeiwen.com/subject/qizfmqtx.html