celery的介绍+使用

Celery 简介

​ Celery是一个基于python开发的分布式异步消息任务队列,通过它可以请轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,可以使用celery

Celery场景

​ 首先对该任务非常耗时,其次不注重结果。

​ 如:短信业务,邮箱业务等。 (注意:如扣费,转账等就不能使用celery)

Celery介绍

​ Celery的框架有三部分组成 ,Broker (消息中间件) ,Worker (任务执行单元) ,Backend (任务结果存储)

Broker

  • Celery本身不提供消息服务,但是可以和第三方提供的消息中间件(队列) 集成,如:RabbitMQ,Redis,KaFKa, 等 每当应用程序调用Celery的异步任务的时候吗,会向Broker传递消息,Broker会把当前传递来的Celery异步任务保存到 Broker中间件里 也可以叫做消息队列,而后worker将会获取消息。

Worker

  • Worker是Celery的任务执行单元,worker并发的运行在分布式的系统节点中,执行Broker中的Celery的异步任务

Backend

  • Backend用来存储worker执行任务的结果,Celery支持以不同方式存储任务的结果,包括Redis,MongoDB 等

如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-okQsEJBI-1589204089950)(/blog/img/celery.png)]

可以看到,Celery 主要包含以下几个模块:

  • 任务模块 Task

    包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列

  • 消息中间件 Broker

    Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。

  • 任务执行单元 Worker

    Worker 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它

  • 任务结果存储 Backend

    Backend 用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用 RabbitMQ, redisMongoDB 等。

安装

安装Rabbitmq

官方安装方法: http://www.rabbitmq.com/install-windows.html

centos系统安装-rabbitmq:hhttp://lql674470845.gitee.io/blog/post/centos-rabbitmq/

安装Celery ,使用(简单例子)

#安装celery
pip install celery

这里需要注意如果你的 celery 是 4.0 及以上版本请确保 python 的 redis 库版本在 2.10.4 及以上,否则会出现 redis 连接 timeout 的错误

  • 创建一个tasks

    #tasks.py
    #导入celery
    from celery import Celery
    
    #我这里broker使用的是rabbitmq  backend使用的是redis
    app = Celery('tasks',broker='amqp://youusername:youpassword@ip:post',
                 backend="redis://:youpassword@ip/0")
    
    
    #app.task装饰add函数成一个Task实例
    @app.task
    def add(x,y):
        return x + y
    
    
    

    OK,到这里,broker 我们有了,backend 我们有了,task 我们也有了,现在就该运行 worker 进行工作了,在 tasks.py 所在目录下运行

  • celery -A tasks worker -l info 
    
    #-A 参数指定创建的celery对象的位置,后面加worker表示该celery实例就是任务执行者
    #-l 参数指定worker输出的日志级别
    
    #注意如果你是用的是windows10系统运行celery4.x版本会出现错误
    #解决办法是安装一个eventlet
    pip isntall eventlet
    #再次启动
    celery -A tasks worker -l info -p eventlet
    

    意思就是运行 tasks 这个任务集合的 worker 进行工作(当然此时broker中还没有任务,worker此时相当于待命状态)

    最后一步,就是触发任务啦,最简单方式就是再写一个脚本然后调用那个被装饰成 task 的函数:

  • #trigger.py
    from tasks import add
    x = input('请输入x')
    y = input('请输入y')
    
    #不要直接 add(4, 4),这里需要用 celery 提供的接口 delay 进行调用
    r = add.delay(int(x),int(y))
    #获取结果  两者都可以获取
    print("task_done",r.get())
    print("task_done2",r.result)
    

    运行此脚本

    到此,一个简单的celery应用就完成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值