简单使用Celery

celery简单使用 Celery是一个强大的异步任务队列/作业队列框架, 它主要用于处理大量消息, 同时为操作提供稳定可靠的消息传输机制.Celery的分布式特性允许任务分散到多个计算节点上并行处理, 从而提高系统的可扩展性, 可靠性和性能.Celery使用消息代理(如: RabbitMQ, Redis)来实现任务的发布和消费, 支持任务的并发执行, 定时调度和结果收集.分布式含义主要包括以下几个方面:* 1. 任务分散与并行处理: 在Celery中, 任务不再局限于单一的计算节点或进程. 阅读详情

简单使用Celery

⚠️ 请关注公众号“朋蛋”

1 介绍

Python异步耗时任务的框架有celery、RQ (Redis Queue)、 Dramatiq、ARQ、huey、funboost等,其中比较成熟的是celery和RQ (Redis Queue)。

Celery 功能强大的“瑞士军刀”,是一个成熟、功能全面的分布式任务队列系统。它支持多种消息代理和后端,适合构建复杂、大规模的应用,以其灵活性和强大功能而闻名。

RQ轻量级的“精致小刀”,基于 Redis,上手极快,配置简单,非常适合中小型项目或快速开发。充分利用 Redis 的数据结构,实现了一个非常直观的任务队列。它是一个 Python 分布式任务处理库,更加轻量级和简单,但它是纯粹的多进程模型,每个 Worker 是一个独立的进程。

celery

# 官网地址
https://docs.celeryq.dev/en/stable/index.html

# Github地址
https://github.com/celery/celery

RQ (Redis Queue)

# 官网地址
https://python-rq.org/

# Github地址
https://github.com/rq/rq/

Dramatiq是一个用于 Python 的分布式任务处理库。它的设计哲学与 Celery 类似,但强调的是简洁、可靠以及易用性,同时避免 Celery 那种复杂的配置和依赖,它的并发模型采用线程与进程混合的模型,并发性能较高。

# 开发文档
https://dramatiq.io/
# Github地址
https://github.com/Bogdanp/dramatiq

ARQ(Asynchronous RQ)是基于Redis(不支持其他组件)和 asyncio 的高性能 Python 异步任务队列。它专为现代异步应用设计,支持优先级队列、延迟任务、任务重试等功能。

# 开发文档
https://arq-docs.helpmanual.io/
# Github
https://github.com/python-arq/arq

安装celery

pip install "celery[librabbitmq,redis,auth,msgpack]"

docker创建Redis容器

docker run -d \
--name my-redis \
-p 6379:6379 \
-e REDIS_PASSWORD=123456 \
redis:6.2.2 redis-server --requirepass 123456

2 Python实现

2.1 消费任务

consumer_task.py

# consumer_task.py
from celery import Celery

# 创建 Celery 实例
app_cel = Celery(
    # 标识名称
    'myapp',
    # 消息代理
    broker='redis://:123456@192.168.108.147:6379/1',
    # 存储数据
    backend='redis://:123456@192.168.108.147:6379/2',
    # 启动线程
    worker_pool="solo"
)


# 执行耗时任务
@app_cel.task
def consumer_data(data: str):
    duration = 3
    print(f"任务开始,将持续 {duration} 秒")
    print(data)
    data_str = data + "-consumer"

    print("任务完成")
    return data_str

在终端中执行任务,consumer_task是文件名。

celery -A consumer_task worker -l INFO

2.2 生产者

producer_task.py

# producer_task.py
import time

from consumer_task import consumer_data


def producer_msg():
    # 发送消息
    for i in range(3):
        time.sleep(1)
        res = consumer_data.delay("data-"+ str(i))
        print(res.get())


if __name__ == '__main__':
    producer_msg()

执行生产者

消费者结果

2.3 Celery配置

Celery的配置很复杂,

# 针对多协程时需先打补丁
from gevent import monkey

# 设置猴子补丁
monkey.patch_all()


from celery import Celery


def _init_celery() -> Celery:
    # 设置Redis基础信息,自己添加配置信息
    redis_base_uri = "redis://:"+config_info.get("redis", "password")+"@"+config_info.get("redis", "host")+":"+config_info.get("redis", "port")

    # 初始化APP
    app = Celery(
        main="celtask",
        broker=redis_base_uri+"/0",
        backend=redis_base_uri+"/0"
    )

    # 配置参数
    app.conf.update(
        # 修改并发任务的工作池,主要包括:prefork(默认)、eventlet和gevent、threads、solo
        # prefork:多进程,用于CPU密集型;
        # eventlet和gevent: 多协程,用于IO密集型,eventlet和gevent是两个不同的协程框架;
        # threads:多进程,处于多协程和多进程之间;
        # solo: 单线程,用于调试和测试;

        # 因为该项目多用于IO型,因此设置为gevent
        worker_pool="gevent",
        # 设置并发数量
        worker_concurrency=100,

        # 预取任务数量,避免任务预取过多
        worker_prefetch_multiplier=1,

        # 忽略任务结果,如果不需要知道结果,可以设置这个值,并把下面的注释
        task_ignore_result=True,

        # # 任务执行状态在redis保留时间,默认24小时
        # # 设置为半小时(30分钟=1800秒)
        # result_expires=1800,

        # 延迟确认
        task_acks_late=True,
        # 跟踪任务启动状态
        task_track_started=True,

        # 避免多个Celery服务同时使用1个Redis数据库,避免冲突
        # 如果不考虑多个服务,可以注释下面的代码
        # 修改默认消息队列
        task_default_queue="app_queue"
    )
    return app


# 获取app
celapp = _init_celery()

python之celery简单使用 python之celery简单使用 参考:https://blog.youkuaiyun.com/zt3032/article/details/79251888 celery是一个简单、灵活和可靠的分布式任务处理系统。专注实时任务队列,也支持任务调度。 一、celery主要包括四个部分 1、任务调度者, 2、中间件,传递任务 broker(常用的有redis、rabbitmq) 3、任务执行者(w... 阅读详情

相关推荐

DPARSF高级版 vs 基础版怎么选?没有T1数据也能做fMRI分析吗?

本文深度对比了DPARSF高级版与基础版在fMRI分析中的核心差异与适用场景,特别针对无T1数据的情况提供了实战解决方案。高级版依赖T1像实现高精度配准,适合需要精确解剖定位的研究;基础版则无需T1数据,适用于功能连接等相对空间要求不高的分析。文章还提供了版本选择决策树和常见问题解决方案,帮助研究者根据实际需求做出最优选择。

weixin_42526087的博客 132

如何选择最适合的消息代理?dramatiq的RabbitMQ与Redis终极对比指南

在Python异步任务处理领域,dramatiq以其出色的性能和可靠性成为了众多开发者的首选。作为一款快速可靠的Python 3后台任务处理库,dramatiq支持多种消息代理,其中RabbitMQ和Redis是最常用的两个选项。本文将为您提供完整的对比指南,帮助您根据项目需求选择最合适的消息代理方案。 ## 📊 核心功能与架构对比 dramatiq的架构设计允许它无缝对接不同的消息代理系统

gitblog_01004的博客 367

OpenClaw + Qwen 模型集成飞书完整教程

1、环境要求:- **操作系统**: Windows- **Node.js**: v18+ (推荐 v20+)- **飞书账号**: 需要企业管理员权限(创建应用用)或者个人飞书账号创建个人应用- **网络**: 能访问 GitHub 和飞书开放平台2、安装Node.js下载完成后验证是否安装成功,cmd窗口输入“node --version”,显示版本号即为安装成功(如下图所示)3、获取大模型APIKEY(这里以Qwen为例)

qq_29609427的博客 477

celery的简单使用

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

????爱好者的博客 2047

MagicDraw-用例图

MagicDraw-用例图

木头征的博客 3129

深度学习笔记(3)——kernel(内核)与filter(滤波器)

本文仅仅简单介绍了kernel和filter的概念,介绍了确定filter和kernel个数的方法。

cs111211的博客 7137

celery+django的简单使用

1.新建Django工程与应用 新建工程与应用这里不做详细介绍,这里我们建一个名为demo的项目和home应用。 1.编辑settings.py文件 在文件的最后添加如下代码: ###配置Broker BROKER_URL = 'redis://127.0.0.1:6379/0' BROKER_TRANSPORT = 'redis' 2.新建celery.py文件 from __future__ import absolute_import import os import django

Jason_WangYing的博客 554

YOLOv8 交通流量监测详解

本文介绍了一个基于YOLOv8的交通流量监测系统,该系统通过深度学习技术实现车辆实时检测、跟踪和分类。系统核心功能包括:1)使用YOLOv8模型检测道路车辆并进行持续跟踪;2)按方向和车型统计车流量;3)支持多区域流量监测和数据可视化。文章提供了完整的代码实现示例,涵盖基础车辆检测、视频流处理和高级数据分析功能。系统还可进一步优化性能,如使用轻量级模型、GPU加速等,并建议扩展车速估算、密度分析等功能。该方案为交通管理提供了有效的实时监测和决策支持工具。

u010117029的博客 346

Celery的简单使用

celery简单使用 安装celery 安装celery: pip3 install celery 安装redis 创建tasks.py文件进行验证 from celery import Celery import time app = Celery('TASK', broker='redis://localhost', b...

小宝儿的学习之路 667

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

985小水博的摸鱼日常 463

双目相机标定理论与编程实现

双目相机标定是计算机视觉中的重要任务,通过确定双目相机的内参和外参,可以实现立体视觉的深度感知和三维重建。通过使用OpenCV库提供的函数,我们可以方便地进行双目相机的标定工作。双目相机标定是计算机视觉中的重要任务,用于确定双目相机的内参和外参,以实现立体视觉的深度感知和三维重建。通过上述代码,我们可以获得左右相机的内参矩阵、畸变系数、旋转矩阵和平移矩阵等参数,从而完成双目相机的标定过程。使用双目相机采集一系列左右相机的图像,确保标定板在不同位置和角度下都能被双目相机拍摄到。函数来检测标定板的角点。

ByteKnight的博客 325

Celery 简单使用

异步任务队列 Celery 使用 一、异步任务: 异步任务是web开发中一个很常见的方法。对于一些耗时耗资源的操作,往往从主应用中隔离,通过异步的方式执行。 简而言之,做一个注册的功能,在用户使用邮箱注册成功之后,需要给该邮箱发送一封激活邮件。如果直接放在应用中,则调用发邮件的过程会遇到网络IO的阻塞,比好优雅的方式则是使用异步任务,应用在业务逻辑中触发一个异步任务。 二、Celery简...

Fe_cow的博客 997

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码

bfq05234214的博客 441

Celery简单使用

Celery是基于Python开发的分布式任务调度工具,简单、灵活可靠,专注于实时任务处理。

夏末蝉未鸣的博客 1128

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

celery的简单使用和遇到的坑

一. celery简介 Celery 是一个基于消息传递、 处理大量消息的分布式系统, 简单、灵活且可靠。与单纯的消息队列相比较,队列中传递的消息为任务(Task/Job)信息,而不是数据类信息, Celery 本身不是任务队列, 是管理分布式任务队列的工具. 它封装了操作常见任务队列的各种操作, 我们使用它可以快速进行任务队列的使用与管理, 专注于实时处理的任务队列,同时也支持任务调度, 其可...

diqiuyi7777的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

celery结合rabbit的简单使用

Celery是一个分布式异步任务队列系统,核心使用流程分为三个步骤:初始化配置、创建任务和调用任务。首先通过Celery类初始化应用并配置消息代理(如RabbitMQ),然后使用@app.task装饰器定义异步任务,支持重试机制、超时设置等参数。任务创建后,可通过delay()或apply_async()方法异步调用,任务会在后台执行。系统还支持定时任务和优先级队列,通过任务ID可监控执行状态和结果。典型应用场景包括邮件发送、批量处理等耗时操作,能有效提升系统响应速度。

weixin_56449709的博客 1684

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

celery 简单入门使用

celery有异步与定时等优势,在项目部署分布有很大的优势 安装 pip install celery 使用(使用前最开始要把redis启动起来,方式https://blog.youkuaiyun.com/weixin_42357472/article/details/88967721) 1、创建实例化和写出一个调度任务app(文件名为 celery_test.py),然后在当前目录运行 celery wo...

weixin_42357472的博客 610

django中使用celery简单介绍

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 本章节我们重点在于实现,如何存储任务的结果. 我们将任务函数改为: from celery_demo.celery import app import time 加上app对象的task装饰器 此函数为任务函数 @app.task def my_task(): print("正在紧张处理任务....") time.s...

weixin_44172023的博客 410

Python中celery的简单使用

1.什么是Clelery - Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 - Celery 通过消息机制进行通信,通常使用中间人(Broker)作为客户端和职程(Worker)调节。启动一个任务,客户端向消息队列发送一条消息, 然后中间人(Broker)将消息传递给一个职程(Worker),最后由职程(Worker)进行执行中间...

Taneost的博客 545

Celery 的简单介绍和使用

Celery初识 目录Celery初识简介安装一个最简单的创建与调用delay调用后celery都做了什么调用后开启worker运行结果的存储celery的配置项目中的使用 测试工作中接触到进程管理工具,学习并记录 简介 是一个使用python开发的任务调度工具,理解时可以分为两部分来理解:Broker、APP、Worker。 Broker celery自己没有任务消息队列,需要借助rabbitmq或者redis来传递任务的,这就是Broker(中间人)。通过配置来指定具体使用rabbitmq还是redi

weixin_40434614的博客 668

Django 中celery的简单使用

Celery异步任务队列 celery的本质: 通过提前创建的进程调用函数来实现异步的任务。 celery的概念: 任务执行者(worker): 提前创建的进程,调用对应的函数来实现异步任务。 任务发出者: 发送需要worker执行的任务函数的信息。 中间人(broker): 任务队列,保存任务发出者发出的信息。 celery的特点: 1)任务执行者(创建的进程)可以单独在另一台...

weixin_44010516的博客 327
上一篇: 简单使用LangExtract
下一篇: 安装开源PPT项目
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值