Celery

    技术2022-07-10  124

    Celery是干什么的?

    Celery是用python开发的一个分布式任务调度模块。换言之,它是一个管理分布式任务队列的工具。 任务队列:队列中传递的是Task/Job信息 消息队列:队列中传递消息类数据 分布式:任务队列分布在多个机器、进程、线程 任务调度:

    安装Celery

    如果你的电脑已经安装了pip,直接命令行执行:pip install Celery 如何验证电脑是否安装了pip,在命令行执行pip,如果出现下图,表明已经安装了pip 执行pip install Celery命令之后,出现下图表明Celery安装成功。

    Celery的组件

    调用Celery API而产生任务Task,任务调度器Beat读取配置文件中的内容把需要执行的任务交给任务队列(Broker)处理,Broker(也称消息中间件)接受任务生产者发送过来的任务消息, 存进队列再按序分发给任务消费方Worker,Backend存储任务的执行结果和状态。

    Producer(生产者):调用 Celery API 、函数而产生任务并交给任务队列处理的都是任务生产者 Beat(任务调度器): Beat 进程会读取配置文件的内容, 周期性的将配置中到期需要执行的任务发送给任务队列. Broker:中间人,接收生产者发来的消息即Task,将任务存入队列。 Worker:执行任务的单元,它实时监控消息队列,如果有任务就获取任务并执行它 Backend : 任务处理完成之后保存状态信息和结果, 以供查询, 可以是AMQP, Redis, memcached, MongoDB, SQLAlchemy. Django ORM, Apache Cassandra等。

    Celery的应用

    celery是易于集成Django, Pylons and Flask,使用 django-celery, celery-pylons and Flask-Celery 附加包即可 task.py

    from celery import Celery # 导入Celery类 celery = Celery('task', broker='redis://localhost:6379/0') # 创建Celery对象cel,中间件为redis @celery.task def send_mail(mail): print('sending mail to %s...' % mail) time.sleep(2.0) print('mail sent.')

    发送任务给woker

    from tasks import sendmail sendmail.delay('service@alibaba.com')

    启动Celery执行任务

    Celery -A task worker --loglevel=info # 启动的是Worker

    Processed: 0.024, SQL: 12