Celery的介绍

1、Celery的简介以及基本使用

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

  1. 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情。
  2. 你想做一个定时任务,比如每天检测一下你们所有客户的资料,如果发现今天 是客户的生日,就给他发个短信祝福

Celery 在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis,后面会讲

1.1 Celery有以下优点:

  1. 简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的
  2. 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
  3. 快速:一个单进程的celery每分钟可处理上百万个任务
  4. 灵活: 几乎celery的各个组件都可以被扩展及自定制

Celery基本工作流程图

Celery安装使用

Celery的默认broker是RabbitMQ, 仅需配置一行就可以

broker_url = ‘amqp://guest:guest@localhost:5672//‘

rabbitMQ 没装的话请装一下,安装看这里  http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html#id3

使用Redis做broker也可以

安装celery模块

pip3  install celery

创建一个celery application 用来定义你的任务列表

创建一个任务文件就叫tasks.py吧

from celery import Celery

app = Celery(‘tasks‘,
             broker=‘redis://localhost‘,
           # broker=‘redis://:123123@106.13.104.194:6379‘,
             backend=‘redis://localhost‘)

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

启动Celery Worker来开始监听并执行任务

celery -A tasks worker --loglevel=info

启动Celery报错问题的处理:

  File "/usr/local/python3/lib/python3.7/site-packages/celery/backends/redis.py", line 22
    from . import async, base
                      ^
SyntaxError: invalid syntax

搜索了一下错误原因,原来是async名称更换了,如下
[Rename `async` to `asynchronous` (async is a reserved keyword in Python 3.7) #4879](https://github.com/celery/celery/pull/4879)

开发人员已经处理了这个issue,合并了master,快速的解决方案是通过github安装celery,命令如下:
pip3 install --upgrade https://github.com/celery/celery/tarball/master
再次运次,那个应该可以看到如下正常输出:

调用任务

再打开一个终端, 进行命令行模式,调用任务

from tasks import add
 add.delay(4, 4)

看你的worker终端会显示收到 一个任务,此时你想看任务结果的话,需要在调用 任务时 赋值个变量

result = add.delay(4, 4)
result.get(timeout=1)
result.ready()
result.get(propagate=False)

 2、在项目中如何使用celery

可以把celery配置成一个应用

目录格式如下

proj/__init__.py
    /celery.py
    /tasks.py

proj/celery.py内容

from __future__ import absolute_import, unicode_literals
from celery import Celery

app = Celery(‘proj‘,
             broker=‘redis://:123123@106.13.104.194:6379‘,
             backend=‘redis://:123123@106.13.104.194:6379‘,
             include=[‘proj.tasks‘])

# Optional configuration, see the application user guide.
app.conf.update(
    result_expires=3600,
)

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

proj/tasks.py中的内容

from __future__ import absolute_import, unicode_literals
from .celery import app

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

@app.task
def mul(x, y):
    return x * y

@app.task
def xsum(numbers):
    return sum(numbers)

启动worker

celery -A proj worker -l info

后台启动worker

celery multi start w1 -A proj -l info

 三、Celery 定时任务

参考:https://www.cnblogs.com/alex3714/articles/6351797.html

原文地址:https://www.cnblogs.com/weidaijie/p/10589438.html

时间: 2024-11-12 23:35:55

Celery的介绍的相关文章

异步任务利器Celery(一)介绍

django项目开发中遇到过一些问题,发送请求后服务器要进行一系列耗时非常长的操作,用户要等待很久的时间.可不可以立刻对用户返回响应,然后在后台运行那些操作呢? crontab定时任务很难达到这样的要求 ,异步任务是很好的解决方法,有一个使用python写的非常好用的异步任务工具Celery. broker.worker和backend Celery的架构由三部分组成,消息中间件(broker),任务执行单元(worker)和任务执行结果存储(result backends)组成. 应用程序调用

小计使用多线程和gevent来提高celery性能及稳定性

前言: 有朋友问我,我那个任务队列是怎么实现,他的疑问其实主要是celery不支持多线程.先说说我那实现的方法,其实我的做法和celery.rq这样的框架很像的,都是把任务push到队列里面,然后pull取出任务而已,celery里面还可以取任务,我这个是通过传送uuid来实现的.   朋友问celery不支持多线程,那是他没有好好看文档.celery是支持多任务并发的,哎... 好好看文档呀. 原文:http://rfyiamcool.blog.51cto.com/1030776/153082

Celery 源码解析七:Worker 之间的交互

前面对于 Celery 的分布式处理已经做了一些介绍,例如第五章的 远程控制 和第六章的 Event机制,但是,我认为这些分布式都比较简单,并没有体现出多实例之间的协同作用,所以,今天就来点更加复杂的,对于多实例直接的交互更多,这就是 Gossip 和 Mingle. Mingle 在 Celery 的介绍中,Mingle 主要用在启动或者重启的时候,它会和其他的 worker 交互,从而进行同步.同步的数据有: 其他 worker 的 clock 其他 worker 已经处理掉的 tasks

浅谈 Celery 分布式队列

Q1: Django开发Web项目时遇到一个问题,如何解决大量用户在同一时间注册,短信发送延迟的问题? A1: ① 封装一个发送短信的函数 ② 创建进程.线程.协程调用发送短信的函数 Q2: 创建的进程.线程.协程和Django网站服务器在同一个电脑上,并且调用顺序也是不确定的 所以A1 OUT A2: Celery(异步任务队列): ① celery中的任务发出者,中间人和任务执行着可以在不同的电脑上 ② celery 中的任务会进行排序,先添加的任务先被worker执行 1. Celery的

分布式任务队列celery用法详解

celery基础介绍:这个图我们可以看出,celery基本结构也就是三部分1 第一部分 broker也就是中间件消息队列,作用就是用来接收应用的请求这一部分常见玩法可以是rabbitmq和redis等2 第二部分 worker 也就是工作队列 也就是celery本身的任务队列服务,一般情况下大型的生产应用我们会结合supervisor来管理这么多的worker3 第三部分 result 存储,就是把执行的结果,状态等信息进行存储,常规用法我们可以用rabbitmq redis,mysql,mon

Celery 初步使用心得

年底了,该给自己写个总结了,一个六年女Java程序员的心声 >>>   一. 基本介绍 Celery是一个专注于实时处理和任务调度的分布式任务队列.所谓任务就是消息,消息中的有效载荷中包含要执行任务需要的全部数据. 使用Celery常见场景: Web应用.当用户触发的一个操作需要较长时间才能执行完成时,可以把它作为任务交给Celery去异步执行,执行完再返回给用户.这段时间用户不需要等待,提高了网站的整体吞吐量和响应时间. 定时任务.生产环境经常会跑一些定时任务.假如有上千台的服务器.上

Celery学习---Celery 分布式队列介绍及安装

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

celery+django+redis使用介绍

版本: celery==3.1.25 django==1.8.6 redis==2.10.6 安装: 进入虚拟环境(虚拟环境创建不同,进入方式不同) pip install celery==3.1.25(以celery安装为例,其他安装方式相同) 运行环境: window10(celery4.0以后不支持windows) linux 目录结构: 最外面的test1为项目名称 里面的test1与app同级目录,里面都是一些配置(其中celery.py放在其中). app2为项目中的一个app ta

python celery介绍和基本使用

08 python celery介绍和基本使用 celery分布式任务队列 RPC远程,当执行一条命令,等待远程执行结果返回客户端. 在Linux上可以在后台执行,不影响其他任务执行.(涉及到异步) 1.分布式任务运算celery 参考:https://www.cnblogs.com/alex3714/p/6351797.html 任务计划:https://www.cnblogs.com/peida/archive/2013/01/08/2850483.html Crontab操作系统本身任务计