celery 简介

Celery简介以及Celery架构 Celery 官方 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.org/docs/celery/configuration.html#configuration 参考:http://ww 阅读详情

Celery功能简介

Celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列。

Celery用于生产系统每天处理数以百万计的任务。

Celery是用Python编写的,但该协议可以在任何语言实现。它也可以与其他语言通过webhooks实现。

由于Celery 3.0系列对以前的系列进行了大量重构优化,现在开始使用就没必要研究旧版本了,所以此介绍以3.0.24的文档为基础。

Celery的工作结构

在使用Celery的时候要明白它的大致结构,Celery的结构非常简单,大致分为3个部分:

  1. worker部分负责任务的处理,即工作线程,在我的理解中工作线程就是你写的python代码,当然还包括python调用系统工具功能
  2. broker部分负责任务消息的分发以及任务结果的存储,这部分任务主要由中间数据存储系统完成,比如消息队列服务器RabbitMQ、redis、 Amazon SQS、MongoDB、IronMQ等或者关系型数据库,使用关系型数据库依赖sqlalchemy或者django的ORM
  3. Celery主类,进行任务最开始的指派与执行控制,他可以是单独的python脚本,也可以和其他程序结合,应用到django或者flask等 web框架里面以及你能想到的任何应用

Celery的安装

Celery只是一个python包,所以可以通过pip或者easy_install安装

pip install celery easy_install install celery

除此之外还需要安装broker的系统,我使用的是redis,除了安装redis以外还需要安装celery-with-redis pip install celery-with-redis 使用其他类型的broker请参见官方文档:

__ http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#using-a-database

Celery的初步使用

启动celery之前先架设好broker服务,安装好redis后以默认方式启动就可以了。 连接方式为:redis://localhost:6379/0

接下来编写任务脚本tasks.py,这个脚本在worker部分和任务分发部分都需要用到:

from celery import Celery

celery = Celery('tasks', broker='redis://localhost:6379/0')

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

执行命令启动worker进行:

#这个命令要在tasks.py文件目录运行,命令表示以worker模式启动一个名为tasks的APP
#worker的名称是test-worker1,一台服务器上可以启动多个worker,只要名称不同,
#启动好的worker会自动根据tasks.py的信息注册到broker服务中,等待分发任务。

celery -A tasks worker --loglevel=info --hostname=test-worker1

执行任务,使用delay()放,如下:

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

也可以使用apply_async()方法,把结果存储在类似broker的backend系统中,可以和broker在同一个服务中, 更改tasks.py中的实例化celery一行,加入backend参数: celery = Celery('tasks', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')

重新执行任务,使用apply_async把结果存储下来,在需要的时候调用get()进行获取,如下:

>>> from tasks import add
>>> result = add.apply_async(4, 4)
>>> result.get()

Celery配置

Celery有很多全局变量,不配置的情况下取默认值,当我们需要配置的时候可以把所有的参数写到一个py文件中然后在 任务文件中进行加载,也可以直接用一个类写到任务文件中,还可以直接对celery类的conf对象直接进行update操作:

方法1,直接加载py文件: celeryconfig.py:

BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True

from celery import Celery

celery = Celery()
celery.config_from_object('celeryconfig')

方法2,直接对conf进行update: from celery import Celery

celery = Celery()
celery.conf.update(
CELERY_TASK_SERIALIZER='json',
CELERY_RESULT_SERIALIZER='json',
CELERY_TIMEZONE='Europe/Oslo',
CELERY_ENABLE_UTC=True,
)

or

celery.conf.CELERY_TASK_SERIALIZER = 'json'

方法3,直接加载类或对象: from celery import Celery

celery = Celery()

class Config:
    CELERY_ENABLE_UTC = True
    CELERY_TIMEZONE = 'Europe/London'

celery.config_from_object(Config)

Celery任务分发控制

在celery里面任务分发控制叫task routing即任务路由

celery的分发控制使用比较简单,但是高级功能比较复杂,我还不能完全理解,就介绍一下最基础的任务路由方法。

在worker进程启动的时候可以使用参数-Q指定当前worker所能接受的队列消息:

celery -A tasks.tasks worker --loglevel=info --hostname=testq-worker -Q 'testq'

然后在任务分发的过程中,调用apply_async或者delay方法中指定queue参数,当queue与worker的-Q相匹配时任务 就可以被分发到相应的worker进程中:

>>> from tasks import add
>>> result = add.apply_async(4, 4, queue='testq')
>>> result.get()

更高级的使用方法请大家研究官网的文档:

__ http://docs.celeryproject.org/en/latest/userguide/routing.html

Celery的管理

celery的管理有几种方式,比较直观的有一个叫flower的webui,可以提供任务查询,worker的生命管理以及路由管理,可以在界面上 进行实时的路由key添加(就是在worker启动时-Q参数指定的值)

使用方式为:

#安装
pip install flower

#启动
celery flower --port=5555 --broker=redis://localhost:6379/0

访问localhost的5555端口即可以使用

还有一种对任务进行实时监控的方式为celery本身提供的events的功能,启动方式为:

#启动一个字符界面下管理的工具,对任务进行方便的跟踪管理
celery events --broker=redis://localhost:6379/0

结束语

celery还有很多功能没来得及研究,我准备把celery应用于服务器管理中一些任务的执行,来代替linux的crontab和一些 手工操作,提升更强的灵活性以及更加直观

node-celery:Node.js的Celery客户端 Node.js的Celery客户端 Celery是基于分布式消息传递的异步任务/作业队列。 node-celery允许对来自Node.js的任务进行排队。 如果您不熟悉Celery,请访问 用法 简单示例,包含在: var celery = require ( 'node-celery' ) , client = celery . createClient ( { CELERY_BROKER_URL : 'amqp://guest:guest@localhost:5672//' , CELERY_RESULT_BACKEND : 'amqp://' } ) ; client . 立即下载

相关推荐

一文读懂无人机AI识别算法,原理、技术、应用

本文详细介绍了无人机识别算法的工作原理、技术优势以及在多个行业的应用前景,展现了其在提升安全监控、资源管理和应急响应中的关键作用。尽管无人机识别算法在多个领域展现出巨大潜力,但仍面临技术挑战,如算法的准确性、数据的实时处理能力以及对复杂环境的适应性。4. 消防与城市管理: 无人机识别算法在消防和城市管理中的应用,为相关部门提供了及时的信息支持,提升了应急处置能力和城市管理水平。1. 公安监控: 无人机识别算法在公安领域的应用,可以实时识别犯罪嫌疑人和违法行为,有效提升城市治安管理的智能化水平。

foiadrone的博客 1849

Django-Celery任务定义注意事项

Python中涉及实时的数据查询变量,不要定义为全局变量,尤其要避免在task中使用。

不积跬步无以至千里 638

疫情数据分析的“核武器”!JHU CSSE COVID-19数据集超深度解析与实战指南(附代码)

在面对这场没有硝烟的战争时,除了医护人员在前线与病毒搏斗,还有一群默默的英雄——数据科学家和分析师,他们利用手中的“数据武器”,昼夜不停地监测、分析、预测疫情走势,为政府决策、资源调配、公众科普提供了至关重要的支撑。同时,由于某些国家(如美国、加拿大、澳大利亚、中国等)的数据细化到省/州级别,为了得到国家层面的总数据,我们需要按国家和日期进行聚合。正是在这样的背景下,经过这些步骤,我们已经得到了一个包含了累计数据、每日新增数据和活跃病例数的完整数据集,可以开始进行深入的分析和可视化了!

wylee的博客 1165

celery变量共享

问题 很多情况下我们想让task共享变量,该怎么做? celery的并发原理 celery的并发任务池,有eventlet, gevent, prefork, thread类型 eventlet/gevent协程: 只有一个进程一个线程, 全局变量在task之间共享 prefork属于multiprocessing: multiprocessing全局变量也是共享的 thread多线程: 全局变量共享 验证方法 用ab命令模拟大量并发,很容易测试出来 ab -n 1000 -c 100 -p ./post.

妙音 1622

别再被systemd-resolved坑了!银河麒麟V10下用Bind9搭建内网DNS的完整避坑指南

本文详细介绍了在银河麒麟V10和Ubuntu系统下部署Bind9 DNS服务器时,如何解决与systemd-resolved的端口冲突问题。提供了五种专业级解决方案,包括彻底禁用systemd-resolved、智能端口转发等,并特别针对银河麒麟V10的安全加固需求给出了配置建议和诊断工具,帮助用户高效搭建内网DNS服务。

weixin_30342209的博客 655

ncl泰勒图(均方根误差、标准差、相关系数)

ncl泰勒图(均方根误差、标准差、相关系数)

weixin_61281699的博客 8006

celery配置使用

一. celery 简介 Celery 是一个专注于实时处理和任务调度的分布式任务队列, 同时提供操作和维护分布式系统所需的工具.. 所谓任务就是消息, 消息中的有效载荷中包含要执行任务需要的全部数据. Celery 是一个分布式队列的管理工具, 可以用 Celery 提供的接口快速实现并管理一个分布式的任务队列. Celery 本身不是任务队列, 是管理分布式任务队列的工具.

kk123a的专栏 2万+

采用了fluent模拟了平壁面结霜过程。udf,很经典,可以试试。

利用该模型作为FLUENT中的源项,模拟了在局部冷却下冷表面上的霜形成,以预测霜的形态、温度分布和霜的重量,结果与实验结果吻合良好。结果显示,霜首先围绕冷却块形成,然后逐渐向其他方向扩展,冷却块上方的霜密度最大。随着时间的推移,平均霜厚度逐渐增加,生长速率减慢,而平均霜密度随增长速率变快而增加。相变传递微观过程与机理、蒸发及冷凝换热、强化传热、高效传热管、热泵、制冷、节水节能新技术、电子元器件冷却、余热回收及梯级利用等。udf,很经典,可以试试。工程热物理、空调、热能、低温制冷、化工、物理等。

qq_15963745的博客 922

celery实现异步任务或定时任务

1. Celery 在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用多线程或异步任务。比如,在 Web 开发中,对新用户的注册,我们通常会给他发一封激活邮件,而发邮件是个 IO 阻塞式任务,如果直接把它放到应用当中,就需要等邮件发出去之后才能进行下一步操作,此时用户只能等待再等待。更好的方式是在业务逻辑中触发一个发邮件的异步任务,而主程序可以继续往下运行。 Celery是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他.

weixin_42289273的博客 1465

CarSim - 仿真汽车驾驶行为的完整源代码及描述

以上是多年收集的稀有软件CarSim的源代码和描述,借助CarSim提供的功能,用户可以准确地模拟和研究汽车的驾驶行为,为汽车设计、驾驶辅助系统等领域提供有价值的支持。是一款用于模拟汽车驾驶行为的稀有软件,它经过多年的收集和开发,提供了一套完整的源代码和相应的描述,能够准确地模拟真实世界中的汽车运动和操控。CarSim的源代码采用现代化的。

weixin_50547796的博客 293

YOLO11 锚框机制全解析:从改进 K-means 聚类到自适应优化,附多场景实战(附代码)

摘要 YOLO11的锚框机制采用"自适应、动态化、场景感知"的设计理念,通过数据驱动的锚框生成、多尺度感知分配和实时优化策略,显著提升目标检测性能。相较于早期YOLO版本,YOLO11的锚框完全基于训练集目标分布自适应生成,并引入智能分配策略,使不同尺寸目标获得最优匹配。技术架构包含自适应锚框生成、多尺度分配器和动态优化模块,通过改进的K-means聚类和交并比计算实现精准匹配。YOLO11锚框机制在检测精度、训练稳定性和场景适应性方面均有显著提升,为复杂场景下的目标检测提供更优解决方案

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1319

celery的简单使用

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

????爱好者的博客 2047

【Bug已解决】Codex CLI 运行时出现 command not found: codex 解决方案

方案适用场景推荐指数修复 PATH 配置最常见的基础排查方向⭐⭐⭐⭐⭐检查原生二进制完整性PATH 正常但执行仍然异常⭐⭐⭐⭐统一包管理器混用多种包管理器导致混乱⭐⭐⭐⭐确认安装脚本未被跳过CI/CD 或企业策略环境⭐⭐⭐⭐排查网络下载渠道企业内网/受限网络环境⭐⭐⭐需要留意 warning 中是否涉及脚本执行失败、网络超时重试等信息,这类 warning 往往是后续问题的前兆,建议出现明显的下载/网络相关警告时就主动重新安装一次确认。Codex CLI 报。

一键难忘的博客 1万+

Celery简介

文章目录1. 前言2. Celery是什么?3. 安装Celery4. 使用Celery4.1 Django和Celery4.2 Flask和Celery5. 配置Celery6. 总结7. 参考文章 1. 前言 2. Celery是什么? 3. 安装Celery $ pip install celery 4. 使用Celery 4.1 Django和Celery 4.2 Flask和Celery 基于 Celery 的后台任务 在 Flask 中使用 Celery 异步发送邮件 # views.py

besmarterbestronger的博客 636

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Celery 简介

Celery 简介 何为任务队列? 我需要什么? 上手 Celery 是… 特性 框架集成 快速跳转 安装 何为任务队列? 任务队列是一种在线程或机器间分发任务的机制。 消息队列的输入是工作的一个单元,称为任务,独立的职程(Worker)进程持续监视队列中是否有需要处理的新任务。 Celery 用消息通信,通常使用中间人(Broker)在客户端和职程间斡旋。这个过程从客户端向...

lionzl的专栏 1435

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python之celery的简介与使用

celery的简介   celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它的执行单元为任务(task),利用多线程,如Eventlet,gevent等,它们能被并发地执行在单个或多个职程服务器(worker servers)上。任务能异步执行(后台运行)或同步执行(等待任务完成)。  在生产系统中...

weixin_34387468的博客 785

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Celery功能简介

       Celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列。 Celery用于生产系统每天处理数以百万计的任务。 Celery是用Python编写的,但该协议可以在任何语言实现。它也可以与其他语言通过webhooks实现。 由于Celery 3.0系列对以前的系列进行了大量重构优化,现在开始使用就没必要研究旧版本了,所以此介绍以3.0.24的文档为基础。 Cel...

ronon77的专栏 624

1 Celery 简介

Celery 是一个功能强大的分布式任务队列,它通过异步任务处理、定时任务调度和分布式计算,解决了很多开发中的任务执行和调度问题。:Worker 是负责执行任务的进程,Celery 会通过 Worker 进程从 Broker 中获取任务,并执行任务逻辑。例如,图像处理、视频编码、机器学习模型训练等任务,可以将大任务拆分成多个小任务并分配给不同的 Worker 执行。比如上传文件、处理图片、发送通知等,这些任务虽然是业务的一部分,但如果在请求的处理流程中直接执行,会导致请求响应的延迟,降低用户体验。

wujianyouhun的专栏 1092

Django中Celery简介

初识Celery: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,可将一些耗时的任务放入该消息队列中处理,一些定时任务也可以放入队列中自动执行,如定期去统计日志,数据备份,或者其他的统计任务。 Celery基本工作流程: Celery的安装与配置 pip install celery pip install celery-...

weixin_30797027的博客 131

celery简介

目录 Celery简介 Celery架构 中间件选择 Celery序列化 简单项目 Celery简介 celery userguide 知乎大神解释celery Celery(芹菜)是基于Python开发的分布式任务队列。它支持使用任务队列的方式在分...

weixin_30480075的博客 127
上一篇: web 服务负载、基本优化架构
下一篇: celery最佳实践
youbo_sun
博客等级 码龄12年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值