celery简介

Celery简介

[toc]

celery userguide

知乎大神解释celery

Celery(芹菜)是基于Python开发的分布式任务队列。它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。

Celery架构

架构图如下:

Celery包括如下组件:

  • Celery Beat

任务调度器,Beat进程会读取配置文件的内容,周期性的将配置中到期需要执行的任务发送给任务队列

  • celery Worker

执行任务的消费者,通常会在多台服务器运行多个消费者来提高执行效率

  • Broker

消息代理,或者叫做消息中间件,接受任务生产者发送过来的任务消息,存进队列在按序分发给任务消费方(通常是消息队列或者数据库)

  • Producer

调用了Celery提供的API,函数或者装饰器而产生任务并交给任务队列处理的都是任务生产者

  • Result Backend

任务处理完后保存状态信息和结果,以供查询。Celery默认已支持 Redis,RabbitMQ, MongoDB,Django ORM,SQLAIchemy等方式

中间件选择

Celery目前支持很多第三方软件作为消息代理,但适用于生产环境的只有RabbitMQ和Redis,至于其他的方式,一是支持有限,二是可能得不到更好的技术支持。Celery官方推荐的是RabbitMQ。

Celery序列化

在客户端和消费者之间传输数据需要序列化和反序列化,Celery支持如下表的序列化方案:

方案 说明
pickle pickle是Python标准库中的一个模块,支持Python内置的数据结构,但是它是Python的专有协议。
从Celery3.2开始,由于安全性等原因Celery将拒绝pickle这个方案
json json支持多种语言,可用于跨语言方案
yaml yaml的表达能力更强,支持的数据类型比json多,但是python客户端的性能不如json
msgpack msgpack是一个二进制的类json的序列化方案,但是比json的数据结构更小、更快

简单项目

项目目录结构如下:

/root/test/proj/celery
├── celeryconfig.py
├── celery.py
├── __init__.py
└── tasks.py

先看一下主程序celery.py:

#!/usr/bin/env python
#coding:utf8

#拒绝隐式引入,因为celery.py的名字和celery的包名冲突,需要使用这条语句让程序正常运行,否则“from celery import Celery”这条语句将会报错,因为首先找到的celery.py文件中并没有Celery这个类
from __future__ import absolute_import
from celery import Celery

# app是Celery类的实例,创建的时候添加了celery.tasks这个模块,也就是包含了celery/tasks.py这个文件
app = Celery('celery',include=['celery.tasks'])

# 把Celery配置存放进celery/celeryconfig.py文件,使用app.config_from_object加载配置
app.config_from_object('celery.celeryconfig')

if __name__ == "__main__":
    app.start()

存放任务函数的文件tasks.py:

#!/usr/bin/env python
#coding:utf8

from __future__ import absolute_import
from celery.celery import app

@app.task
def add(x, y):
    return x+y

tasks.py只有一个任务函数add,让它生效的最直接的方法就是添加app.task这个装饰器。

celery配置文件celeryconfig.py:

# 使用Redis作为消息代理
BROKER_URL = 'redis://192.168.189.100:6379/0'

# 把任务结果保存在Redis中
CELERY_RESULT_BACKEND = 'redis://192.168.189.100:6379/1'

# 任务序列化和反序列化使用msgpack方案
CELERY_TASK_SERIALIZER = 'msgpack'

# 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON
CELERY_RESULT_SERIALIZER = 'json'

# 任务过期时间,这样写更加明显
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24

# 指定接受的内容类型
CELERY_ACCEPT_CONTENT = ['json', 'msgpack']

这个例子中没有任务调度相关的内容,如果有的话就要使用Queue类了,所以只需要启动消费者:

celery -A proj worker -l info

-A参数默认会寻找proj.celery这个模块,其实使用celery作为模块文件名字不怎么合理。可以使用其他名字。举个例子,假如是proj/app.py,可以使用如下命令启动:

celery -A proj.app worker -l info
时间: 2024-10-08 23:34:57

celery简介的相关文章

43. Python celery简介

Celery异步分布式 什么是celery? 他是一个python开发的异步分布式任务调度模块 celery本身不提供消息服务,使用第三方服务,也就是broker来传递任务,目前支持rabbitmq,redis,数据库等等. 我们使用redis 连接URL的格式为:     redis://:[email protected]:port/db_number 例如:     BROKER_URL='redis://localhost:6379/0' 过程如图示 在python里面如果用到异步分布式

day43——celery简介、celery小例子

一.Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情. 你想做一个定时任务,比如每天检测一下你们

【理论】python使用celery异步处理请求

Flask中使用celery队列处理执行时间较长的请求. 一. 安装celery pip install celery flask redis 二. celery简介 Celery是个异步分布式任务队列 通过Celery在后台跑任务并不像线程那么简单,但是用Celery的话,能够是应用有较好的扩展性,因为Celery是个分布式架构,下面介绍Celery的三个核心组件: 1. 生产者(Celery client): 生产者发送消息,在Flask上工作时,生产者在Flask应用内运行 2. 消费者(

Python学习笔记 - day14 - Celery异步任务

Celery概述 关于celery的定义,首先来看官方网站: Celery(芹菜) 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具. 简单来看,是一个基于python开发的分布式异步消息任务队列,持使用任务队列的方式在分布的机器.进程.线程上执行任务调度.通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的

Django使用Celery异步任务队列

1  Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收的工作任务,这个功能依赖于消息队列(MQ.Redis). 1.1  Celery原理 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 消息中间件:Celery本身不提供消息服务,但

Python 并行分布式框架 Celery

Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分布式决定了可以有多个 worker 的存在,队列表示其是异步操作,即存在一个产生任务提出需求的工头,和一群等着被分配工作的码农. 在 Python 中定义 Celery 的时候,我们要引入 Broker,中文翻译过来就是"中间人"的意思,在这里 Broker 起到一个中间人的角色.在工头提

python任务调度模块celery

python任务调度模块celerycelery简介Celery特点Celery工作流程图celery安装使用 python任务调度模块celery celery简介 Celery是一个python开发的异步分布式任务调度模块.Celery本身并不提供消息服务,使用第三方服务,也就是borker来传递任务,一般使用rabbitMQ或者Redis. Celery特点 简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的. 高可用:当任务执行失败或执行过程中发生连接中断,celery

【转】Python 并行分布式框架 Celery

原文链接:https://blog.csdn.net/freeking101/article/details/74707619 Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/ celery配置:http://docs.jinkan.o

Celery框架的基本使用方法

一. Celery简介 Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度. Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 消息中间件:Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成.包括,RabbitMQ, Redis等等. 任务执行单元:Worker是Celery提供的任务执行的单元