首页 > 其他分享 >celery

celery

时间:2023-02-24 01:11:07浏览次数:52  
标签:Celery tasks 队列 app celery 任务

 

celery,实现了异步的分布式任务队列。中间是两个队列,左边是执行任务,将任务提交到中间的队列中,右边是worker,能自动发现队列中的任务。左边调用任务,右边worker就会拿到这个任务运行,并且是异步运行,运行的结果会放到结果队列中,如果需要,调用任务的程序能拿到这个结果。这就是分布式任务队列,它跟我们的项目是分开的,是独立运行的。

 

 

选择一个broker,就是选择一个消息队列,可以使用rabbimq,redis或者是其它。我们这里的任务队列和任务结果队列都用redis作为broker

 

 当客户端发起任务到服务端,服务的django接收到任务之后,比如前端登录时发送短信,服务端调用程序给短信接口发送请求,发送短信给客户并接收响应信息,这种情况就可以用celery去做成异步的任务,我们也可以用协程去做。

安装

pip install -U celery

Celery 官网:Celery - Distributed Task Queue — Celery 5.2.7 documentation

Celery 官方文档英文版:Celery - Distributed Task Queue — Celery 5.3.0b1 documentation

Celery 官方文档中文版:Celery - 分布式任务队列 — Celery 3.1.7 文档

Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统

应用

首先你需要一个 Celery 实例,称为 Celery 应用或直接简称应用。既然这个实例用于你想在 Celery 中做一切事——比如创建任务、管理职程——的入口点,它必须可以被其他模块导入。

在此教程中,你的一切都容纳在单一模块里,对于更大的项目,你会想创建 独立模块 。

让我们创建 tasks.py :

from celery import Celery

app = Celery('tasks', broker='amqp://guest@localhost//')

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

Celery 的第一个参数是当前模块的名称,这个参数是必须的,这样的话名称可以自动生成。第二个参数是中间人关键字参数,指定你所使用的消息中间人的 URL,此处使用了 RabbitMQ,也是默认的选项。更多可选的中间人见上面的 选择中间人 一节。例如,对于 RabbitMQ 你可以写 amqp://localhost ,而对于 Redis 你可以写 redis://localhost .

你定义了一个单一任务,称为 add ,返回两个数字的和。

根据情况我们创建如下的目录结构

 

我们在主程序中创建app,需要指定broker等参数。我们可以如下方式去配置。我们也可以写一个config文件,然后导入配置

 

 我们可以先配置一下borker地址

# 任务队列的链接地址(变量名必须叫这个)
broker_url = 'redis://127.0.0.1:6379/14'  
# 结果队列的链接地址(变量名必须叫这个)
result_backend = 'redis://127.0.0.1:6379/15'

 

 我们在主程序中创建celery对象,然后根据配置文件导入配置

 

 接下来就是写任务了。我们创建一个包,并创建一个文件,文件名得是tasks

 

 看下官网是如何写的,是在任务函数上面添加celery的装饰器,跟flask视图函数装饰器的使用差不多。

 

 我们将创建的celery对象app导入,然后在tasks文件中写任务函数,并用app.task作为装饰器给任务函数使用。task后面不用加括号

 

 我们如何去发现我们写的任务呢,我们在主程序中调用自动发现任务的方法,指定任务的路径。任务的路径就写到tasks文件的目录就可以,它就会自动找到这个目录下对应的tasks文件中app.task装饰的函数。

 

 

 

运行celery,到celery的外层目录执行命令

celery -A mycelery.main worker --loglevel=info (或者直接写info也行) #-A是指定celery启动入口

 

 

 -A 指定是mycelery下的main文件文件启动,使用worker来启动,

需要修改一下

 

 

 任务要放到列表里面

 

 我们可以看到。任务成功运行,看到配置信息,8个并发

 

 

 还可以看到任务函数名称,

 

标签:Celery,tasks,队列,app,celery,任务
From: https://www.cnblogs.com/machangwei-8/p/17149995.html

相关文章

  • django中使用celery,模拟商品秒杀。
    Celery是Python开发的简单、灵活可靠的、处理大量消息的分布式任务调度模块 安装:pipinstallcelery#安装celery库pipinstallredis#celery依赖于......
  • Celery ValueError: not enough values to unpack (expected 3, got 0)
    一:报错描述a.window10b.pycharm+python3.6.6+django2.2+restframework3.13.1+celery5.1.2c.在调用的时候报的错,启动并没有报错d.错误截图二.错误原因没抄到,wi......
  • celery僵死导致jumpserver提示 连接WebSocket失败
    celery僵死导致jumpserver提示连接WebSocket失败Celery的任务监控位于堡垒机”作业中心“下的”任务监控“中,点击打开新的页面如下图所示刷新页面这里的status状态一......
  • Python-celery介绍与快速上手
    1.celery介绍:  celery是一个基于Python开发的模块,可以帮助我们在开发过程中,对任务进行分发和处理。            详细介绍取自:Python之celery的简介与使......
  • Celery
    一、什么是Celery1.1、celery是什么Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度。Celery的架构由三......
  • python分布式框架celery(二)
    一、什么是Celery1.1、celery是什么Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度。Celery的架构由三......
  • celery架构介绍和基本使用
    一、Celery架构介绍分布式异步任务框架,可以支持大量任务的并发执行(celery服务主要为其他项目服务提供异步解决任务需求的)可以不依赖任何服务器,通过自身命令,启动服务,内......
  • celery 调用 scrapy
    celery调用scrapy需求如同调用函数般调用.定时或时时获取数据.实现fromcrochetimportsetup,wait_forfromscrapy.crawlerimportCrawlerProcessclassCra......
  • 【luffy】celery 使用
    目录1.celery快速使用2.Celery异步任务框架3.按装使用步骤4.celery包结构5.celery异步任务,延迟任务,定时任务5.1异步任务5.2延迟任务5.3定时任务6.django中使用ce......
  • celery的使用与接口加缓存的双写一致性
    celery快速使用1.celery是独立的访问-官网http://www.celeryproject.org/'''1)可以不依赖任何服务器,通过自身命令,启动服务2)celery服务为为其他项目服务提供异步解决任......