Celery(一)Celery介绍、安装和基本使用

2023-11-01

1.Celery介绍


1.1 Celery是什么?

  • Celery是Python开发的简单、灵活可靠的、处理大量消息的分布式任务调度模块
  • 专注于实时处理的异步任务队列
  • 同时也支持任务调度

Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,Celery支持的消息服务有RabbitMQ、Redis、Amazon SQS;Celery 是用 Python 编写的,但协议可以用任何语言实现。除了 Python 语言实现之外,还有Node.js的 node-celery 和php的 celery-php 。

需要注意的是:

Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform.

大概意思就是Celery 是一个资金最少的项目,因此我们不支持 Microsoft Windows,请不要提出与该平台相关的任何问题。官方不支持windows,可以通过插件eventlet在windows中使用,功能有部分缩减。


1.2 架构图

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

启动celery服务(配置好broker和backend),手动或自动添加任务到broker中,broker将任务分发给worker,worker后台异步执行任务,执行完成后将结果存放到backend中。
在这里插入图片描述


2.安装

2.1 linux安装

通过pip安装

# 本机Python环境为Python3.7.4
pip install celery

# 验证安装 查看版本
celery --version

---console---
5.2.3 (dawn-chorus)

使用redis作为backend和broker,需要本机安装redis,并启动redis-server,还需要安装Python第三方模块redis

pip install redis

2.2 windows安装

由于官方不支持windows安装和使用,需要借助Python第三方模块eventlet,此模块主要作用通过协程实现并发。

pip install celery
pip install eventlet

# 验证安装 查看版本
celery --version

---console---
5.2.3 (dawn-chorus)


3.基本使用

目录结构
celery对目录要求严格,如果不在目录下加入__init__.py,worker执行任务可能会出现NotRegistered的情况

demo1
	- __init__.py
	- tasks.py
	- run.py

tasks.py

from celery import Celery

# 通过使用本机redis且没有密码,使用远程redis有密码格式为
# 'redis://:密码@ip:6379/1'
broker = 'redis://127.0.0.1:6379/1'  # 任务储存
backend = 'redis://127.0.0.1:6379/2'  # 结果存储,执行完之后结果放在这

# 创建出app对象
app = Celery(__name__, broker=broker, backend=backend)

# 任务通过装饰器@app.task进行装饰
@app.task
def add(x, y):
    return x + y

run.py

from tasks import add

# 添加任务

# 返回一个 AsyncResult 实例,可以用于进行跟踪任务状况
result = add.delay(3,4)
print(result)

3.1 启动worker

# 需要cd到tasks文件对应的路径
# 启动一个worker,日志打印级别为info

# windows平台启动
# celery -A tasks worker -l info -P eventlet
# linux启动
# 格式为:celery -A app对象所在的文件 worker -l 日志级别
celery -A tasks worker -l info

---console---
/usr/local/lib/python3.7/site-packages/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
absolutely not recommended!

Please specify a different user using the --uid option.

User information: uid=0 euid=0 gid=0 egid=0

  uid=uid, euid=euid, gid=gid, egid=egid,
 
 -------------- celery@6ae5fd398c10 v5.2.3 (dawn-chorus)
--- ***** ----- 
-- ******* ---- Linux-3.10.0-1160.59.1.el7.x86_64-x86_64-with-debian-9.11 2022-03-31 02:52:29
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x7f00470ca550
- ** ---------- .> transport:   redis://:**@127.0.0.1:6379/1
- ** ---------- .> results:     redis://:**@127.0.0.1:6379/2
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
                

[tasks]
  . tasks.add

[2022-03-31 02:52:29,388: INFO/MainProcess] Connected to redis://:**@127.0.0.1:6379/1
[2022-03-31 02:52:29,391: INFO/MainProcess] mingle: searching for neighbors
[2022-03-31 02:52:30,497: INFO/MainProcess] mingle: sync with 4 nodes
[2022-03-31 02:52:30,497: INFO/MainProcess] mingle: sync complete
[2022-03-31 02:52:30,511: INFO/MainProcess] celery@6ae5fd398c10 ready.


# 从控制台中可以看到一些celery的一些配置信息和运行信息

3.2 添加任务

# 需要cd到run.py同路径,且需要新打开一个bash窗口
python run.py
459b9b9f-de0e-4caf-bd23-f49ef89c797c
---console---


# 此时查看worker所在的bash窗口,窗口打印出了新的log信息
---console---
[2022-03-31 03:20:09,985: INFO/MainProcess] Task tasks.add[459b9b9f-de0e-4caf-bd23-f49ef89c797c] received
[2022-03-31 03:20:10,011: INFO/ForkPoolWorker-1] Task tasks.add[459b9b9f-de0e-4caf-bd23-f49ef89c797c] succeeded in 0.02414786597364582s: 7

连接redis查看结果存储

[root@centos-01 demo1]# redis-cli

127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
1) "celery-task-meta-459b9b9f-de0e-4caf-bd23-f49ef89c797c"
127.0.0.1:6379[2]> get celery-task-meta-459b9b9f-de0e-4caf-bd23-f49ef89c797c
"{\"status\": \"SUCCESS\", \"result\": 7, \"traceback\": null, \"children\": [], \"date_done\": \"2022-03-31T03:20:09.987307\", \"task_id\": \"459b9b9f-de0e-4caf-bd23-f49ef89c797c\"}"
127.0.0.1:6379[2]> 


# celery中backend使用的库为2,切换到对应的库中,查看所有的key,发现只有一个key,且key中包含AsyncResult 实例,查看该key
# 对应的value,正是我们执行的一些信息

3.4 扩展

在run.py中添加

# 查看任务执行状态,执行完成(不管是否发生异常还是正常执行)返回True,未执行返回False
print(result.ready())

# 如果任务出现异常,可以通过以下命令进行回溯
result.traceback


from tasks import app
from celery.result import AsyncResult

asy = AsyncResult(id=result, app=app)
# 是否正常执行完成,正常执行成功返回True,否则返回False
print(asy.successful())

# 执行成功打印结果
print(asy.get())

# 是否正常执行失败,失败返回True,否则返回False
print(asy.failed())
# 查看任务状态
print(asy.status)
# 执行状态一般有三种PENDING、RETRY、STARTED

3.3 停止worker

直接通过Ctrl + C停止即可

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Celery(一)Celery介绍、安装和基本使用 的相关文章

  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关
  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 如何使用 Boto3 启动具有 IAM 角色的 EC2 实例?

    我无法弄清楚如何使用指定的 IAM 角色在 Boto3 中启动 EC2 实例 以下是迄今为止我如何成功创建实例的一些示例代码 import boto3 ec2 boto3 resource ec2 region name us west 2
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • cmake:aux_source_directory

    理论 aux source directory 查找在某个路径下的所有源文件 aux source directory lt dir gt lt variable gt 搜集所有在指定路径 lt dir gt 下的源文件的文件名 将输出结果
  • 禅道的测试模块(编写用例)

    建用例 用测试人员1的账号登录
  • PCI配置空间访问机制 及 地址域转换过程

    访问配置空间的总线事务通过ID进行寻址 ID号由总线号 Bus 设备号 Device 功能号 Function 组成 总线号 HOST主桥遍历PCI总线时确定 PCI总线可以通过PCI桥来扩展 并形成PCI总线树 在PCI总线树上 有几片P
  • LinearGradient线性渲染

    java view plain copy import android content Context import android graphics Canvas import android graphics Color import
  • 深度学习Apex库的安装以及一些问题的解决

    深度学习Apex库的介绍 APEX是英伟达开源的 完美支持PyTorch框架 用于改变数据格式来减小模型显存占用的工具 其中最有价值的是amp Automatic Mixed Precision 将模型的大部分操作都用Float16数据类型
  • Java dom4j生成XML文件的方法分享

    转自 Java dom4j生成XML文件的方法分享 下文讲述使用dom4j生成XML文件的方法分享 如下所示 dom4j创建xml的方法分享 1 创建一个文档模型 Document document DocumentHelper creat
  • Java手动释放对象

    伪代码 public void updateUser BufferedWriter writer BufferedReader reader List
  • Object.entries()的使用

    Object entries的使用方法 场景 数据形式 场景 假如你要去做一个本地保存 键名相同 但是要做很多取值赋值 取值赋值 那你就可以使用Object entries 和for of搭配去实现一个简单的代码 数据形式 首先我们假定一个
  • 正则表达式中'.*?'和'.*+'的理解

    首先我们了解一下都有哪些限定符 字符 描述 匹配前面的子表达式零次或多次 例如 zo 能匹配 z 以及 zoo 等价于 0 匹配前面的子表达式一次或多次 例如 zo 能匹配 zo 以及 zoo 但不能匹配 z 等价于 1 匹配前面的子表达式
  • ChatGpt同类产品及其集成产品大全

    觉得好用帮忙点个赞吧 可以关注一下 后续会持续更新添加网站 ChatGpt是什么 Chat GPT 是一个基于 GPT 3 5 架构训练的大型语言模型 可以用于各种自然语言处理任务 例如文本生成 对话系统 语言翻译等 1 文心GPT 此网站
  • 【PMP】三点估算结合正态分布图

    贝塔分布公式 最乐观 4 最可能 最悲观 6 标准差公式 最悲观 最乐观 6 贝塔分布 是 PMOK 中三点估算的缺省 默认公式 三点估算结合正态分布图 68 26 的结果数据位于均值的 1 西格玛内 95 46 的结果数据位于均值的 2
  • 黄仁勋管理万亿英伟达的疯狂方法:没有计划、没有汇报、没有层级

    丰色 发自 凹非寺量子位 公众号 QbitAI 今年最为风头无两的半导体公司 无疑是市值已超1万亿的英伟达 让人没想到的是 老黄居然有着特别 甚至说是近乎疯狂的管理方式 没有计划 没有汇报 没有明确层级 曝光称 他直接管理40名下属 信奉扁
  • C语言中关于malloc(0)问题

    首先来解释malloc 0 的问题 这个语法是对的 而且确实也分配了内存 但是内存空间是0 就是说返回给你的指针是不能用的 感觉奇怪吧 但是从操作系统的原理来解释就不奇怪了 这要涉及操作系统维护内存的方法来说了 在内存管理中 内存被分为2部
  • wamp You don't have permission to access / on this server等问题的解决.

    Forbidden You don t have permission to access index phpon this server 然后也是找了很多 多是说什么allow from all等等的问题 但无论怎么设置都是这个问题 几经
  • [代码案例] 快速入手matlab绘图基本指令

    主要内容 Matlab绘图指令基本语法 涵盖画布位置大小 坐标调整 图例标签 子图绘制等 part 1 生成绘图数据据 part 2 绘图基本指令 part 3 多条曲线绘制 part 4 子图分块绘制方法 part 5 指定画布绘制 代码
  • ADworld reverse wp - babymips

    i i 4 32 i 其实是对v5数组进行操作 i 4是v5起始地址 观察栈帧得知 之后对比fdata的5个字节数据 再进入sub 4007F0进行检查 分别处理奇偶两种情况 奇数 v1 a1 i gt gt 2 a1 i lt lt 6
  • 孔乙己:参数的⑨种写法

    孔乙己 参数的 种写法 这里客串一下 using Ty int 1 Ty 2 const Ty Ty const 3 const Ty Ty const 4 Ty 5 Ty 6 Ty 7 const Ty Ty const 8 Ty con
  • 区间预测

    区间预测 MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测 目录 区间预测 MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测 效果一览 基本介绍 模型描述 程序设计 参考资料 效果一览 基本介绍 MATLAB
  • 基于正交试验的钢丝绳探伤仪结构参数优化

    目录 理论基础 比尔萨法定律 磁路欧姆定律 编辑 标题 摘要 结论 标题 摘要 结论 研究背景 大背景 小背景 研究内容 成果 内容 结论 成果 潜在研究点 疑问 理论基础 比尔萨法定律 磁路欧姆定律 标题 摘要 结论 标题 基于正交试验的
  • Celery(一)Celery介绍、安装和基本使用

    目录 1 Celery介绍 1 1 Celery是什么 1 2 架构图 2 安装 2 1 linux安装 2 2 windows安装 3 基本使用 3 1 启动worker 3 2 添加任务 3 4 扩展 3 3 停止worker 1 Ce