celery异步任务框架、celery的启动


一、celery异步任务框架

官方

Celery 官网:http://www.celeryproject.org/

Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html

Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/

1、可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket)
2、celery服务为为其他项目服务提供异步解决任务需求的

注:会有两个服务同时运行,一个是项目服务,一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的需求

 例如:人是一个独立运行的服务 |,医院也是一个独立运行的服务
           正常情况下,人可以完成所有健康情况的动作,不需要医院的参与;但当人生病时,就会被医院接收,解决人生病问题
           人生病的处理方案交给医院来解决,所有人不生病时,医院独立运行,人生病时,医院就来解决人生病的需求

 

二、celery架构图

Celery的架构由三部分组成,消息中间件(message broker)、任务执行单元(worker)和 任务执行结果存储(task result store)组成。

消息中间件

Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等

任务执行单元

Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

任务结果存储

Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等

 

注意:Broker 相当于 挂号窗口 (也相当于 生产者)。Worker 相对于 医生看病(也相当于 消费者) 。Backend 相当于 检验报告单。

          后期 Broker 要用RabbitMQ

注意:队列比数据库的好处是:队列可以进行通信,消费者一旦执行起来,会一直执行。

           队列可以做到,当队列中没有数据了,就告诉消费者不要执行消费了,或者告诉生产者让它生产

 

三、使用场景

异步执行:解决耗时任务    (如:边下载电影,边看电影)

延迟执行:解决延迟任务    (如:定时发邮件、短信)

定时执行:解决周期(周期)任务  (如:定时闹钟,定时更新轮播图,定时爬虫天气)

四、Celery的使用

1、    pycharm终端下安装:

          命令:pip install celery

2、cmd终端命令检查

 

 

 

 

3、消息中间件:RabbitMQ/Redis

    app=Celery('任务名', broker='xxx', backend='xxx')

4、启动celery

方法一、模块下

    01、创建app+任务

 

 

 

  02、pycharm终端下安装:

          先 cd 到scripts文件夹下

          再命令:pip install eventlet   (非windows系统不需要)

 03、pycharm终端下:

        先 cd 到scripts文件夹下

        再命令:celery worker -A t_celery -l info -P eventlet

注意:非windows系统下   命令:celery worker -A t_celery -l info

 

方法二、包下

01、创建 app+任务   

 

 

 02、同方法一

03、pycharm终端下:

        先 cd 到scripts文件夹下

        再命令:celery worker -A 包名 -l info -P eventlet

注意:非windows系统下   命令:celery worker -A 包名 -l info

四、启动celery(两种celery任务结构:提倡用包管理,结构更清晰)总结

# 如果 Celery对象:Celery(...) 是放在一个模块下的
# 1)终端切换到该模块所在文件夹位置:scripts
# 2)执行启动worker的命令:celery worker -A 模块名 -l info -P eventlet
# 注:windows系统需要eventlet支持,Linux与MacOS直接执行:celery worker -A 模块名 -l info
# 注:模块名随意


# 如果 Celery对象:Celery(...) 是放在一个包下的
# 1)必须在这个包下建一个celery.py的文件,将Celery(...)产生对象的语句放在该文件中
# 2)执行启动worker的命令:celery worker -A 包名 -l info -P eventlet
# 注:windows系统需要eventlet支持,Linux与MacOS直接执行:celery worker -A 模块名 -l info
# 注:包名随意

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM