celery二

Celery任务卡住了怎么办?快速排查执行中任务的5个诊断命令 本文针对Celery异步任务执行中常见的“假死”问题,提供了5个核心命令行诊断方法。从快速感知系统状态(status, active)到深入Worker内部剖析(stats),再到直接查询后端存储(Redis/MongoDB),帮助开发者精准定位任务卡住的根因,并给出安全终止与长效预防策略。 阅读详情

celery
选择并安装一个消息通道(RabbitMQ,Redis)
安装Celery并创建第一个任务(发布任务)
开始工作者并执行任务(使用celery命令创建工作者)
跟踪任务不同阶段的状态,并监视它们的返回值。
安装celery
pip install celery
redis配置
在redis配置文件修改
1.修改bind 0.0.0.0
2.protected-mode no
3.daemonize yes
4.在redis里config set requirepass 123 ->123是密码
5.重起redis服务

Celery,是一个消费者模型,本身不需要过多的操作。它有一个输入和一个输出,你需要将输入连接到一个中间人,如果需要还需要把输出连接到一个结果后台。
应用程序
首先你需要一个Celery实例,也可以简称为Celery应用程序或者"app"。这个app会作为Celery中所有工作的入口,比如创建任务,管理工作者。它必须能够被其它模块导入。
创建一个app
from celery import Celery
app = Celery('tasks', broker='amqp://guest@localhost//')
@app.task
def add(x, y):
    return x + y

 创建一个工作消费者:celery -A tasks worker --loglevel=info


调用任务
  可以通过使用delay()方法来调用我们的任务。
  这是一个调用apply_async()方法的便捷方法。它能够给我们对任务执行有更多的控制。

保存结果
  如果你想保存任务状态轨迹,Celery需要在某处保存或者发送这些状态,配置了结果后台,我们再次运行我们的任务。这样在你调用了任务之后,将能够获得一个AsyncResult实例。
  ready()方法将会返回这个实例,不管任务是正在运行还是已经运行结束。
  你也可以等待结果完成
  get()方法

配置
app.conf.task_serializer = 'json'
app.config_from_object('celeryconfig')
app.conf.update(
    task_serializer='json',
    accept_content=['json'],  # Ignore other content
    result_serializer='json',
    timezone='Europe/Oslo',
    enable_utc=True,
)

celeryconfig.py:

broker_url = 'amqp://'
result_backend = 'rpc://'

task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']
timezone = 'Europe/Oslo'
enable_utc = True


app实例
from __future__ import absolute_import, unicode_literals

from celery import Celery

app = Celery('proj',
             broker='amqp://',
             backend='amqp://',
             include=['proj.tasks'])

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

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

a.broker关键字参数指定了中间人所使用的URL
查看Choosing a Broker 获得更多信息
b.backend关键字参数指定了要使用的结果后台
用它来跟踪任务状态和结果。尽管默认情况下,结果选项被禁用。我这里还指明了backend是因为稍后我将展示怎样检索结果,你可能会在你的程序里使用其它的backend。
它们有各自的优势和劣势。如果你不需要结果你最好禁用它们。结果也可以被个别的任务禁用,通过在task装饰器中指定ignore_result选项( @task(ignore_result=True))
查看Keeping Results 获得更多的信息
c.include关键字参数是一个在worker启动时要导入的模块列表。在这里需要添加我们的tasks模块,这样worker启动时才能找到我们的task.
运行worker:celery -A tasks worker --loglevel=info

当worker启动时你应该可以看到如下信息:
When the worker starts you should see a banner and some messages:
-------------- celery@halcyon.local v4.0 (0today8)
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** --- . broker:      amqp://guest@localhost:5672//
- ** ---------- . app:         __main__:0x1012d8590
- ** ---------- . concurrency: 8 (processes)
- ** ---------- . events:      OFF (enable -E to monitor this worker)
- ** ----------
- *** --- * --- [Queues]
-- ******* ---- . celery:      exchange:celery(direct) binding:celery
--- ***** -----

--broker URL(transport)是我们在celery模块中指定的broker关键字参数,你也可以通过-b选项在命令行指定一个不同的broker.
--concurrency 是用来执行任务而prefork的worker进程,如果所有的worker都在执行任务,那么新添加的任务必须要等待有一个正在执行的任务完成后才能被执行。
默认的concurrency数量是机器上CPU的数量,你可以指定一个数量通过-c选项(celery worker -c )。在这里没有推荐值,因为最优值依懒许多因素,但是如果你的任务大部分都是I/O相关的,你可以尝试增加这个值,实验证明增加到2倍以上于CPU数的值对性能提高微乎其微,相反还会降低性能。
除了默认的进程池,Celery还支持使用Eventlet,Gevent和线程(查看 Concurrency)
--Events是一个选项,它可以用来使Celery在worker中有事件发生时发送监控消息(events)。这些信息可以被一些监控程序使用,比如celery events和Flower---一个实时的Celery monitor,更多详细介绍可以查看Monitoring and Management guide.
--Queuens是一个队列列表,workers将会从中消费任务。可以告诉worker一次性地从多个队列中消费任务,这可以用来路由消息给指定的worker。这对于构建高质量的服务,关系的分离和提供优先级都有意义。具体的描述参考Routing Guide.
你可以获得一个完整的命令行列表通过--help参数。

停止worker
可以简单的通过crtl+c来终止worker。worker可以接收的信号列表可以查看Workers Guide.

在后台运行
在生产环境中,你可能希望在后台运行worker.下面的文档中有详细的介绍:daemonization tutorial.


路由

Celery支持AMQP提供的所有路由机制,但是也支持将消息发送到命名队列的简单路由。

task_routes配置允许你通过名字来路由任务,还可以将所有的东西进行集中控制。


app.conf.update(
    task_routes = {
        'proj.tasks.add': {'queue': 'hipri'},
    },
)
你也可以在运行时通过queue关键字参数来为apply_async函数指定队列。

>>> from proj.tasks import add
>>> add.apply_async((2, 2), queue='hipri')
你可以通过指定celery worker -Q选项来让一个worker从队列中执行任务。

$ celery -A proj worker -Q hipri
你可以通过逗号分隔符来指定多个队列。比如,你可以指定worker从默认队列和“hipri”队列中执行任务,默认的工作队列由于历史原因名为'celery'。


$ celery -A proj worker -Q hipri,celery

远程控制

如果你正在使用RabbitMQ(AMQP),Redis或者MongoDB作为中间人,你可以在运行时控制和监视worker。

比如,你可以查看哪个任务正在被worker执行:


$ celery -A proj inspect active
这是通过广播消息实现的,所以所有的远程控制命令会被集群中的所有worker收到。
你还可以通过使用--destination选项来指定需要发送监控请求的workers所有的节点,所有的节点以逗号分隔。

$ celery -A proj inspect active --destination=celery@example.com
如果不指定destination,则所有的worker都会响应和回应广播请求。

celery inspect的相关所有命令并不会改变worker中的任何东西,它仅仅是请求关于正在运行的worker的信息和数据。要查看所有相关的命令,你可以执行:

$ celery -A proj inspect --help
还有一个celery control命令,它可以在运行时改变worker的相关内容:
$ celery -A proj control --help
比如,你可以强制worker使能事件消息(用于监控task和workers)
$ celery -A proj control enable_events
在事件机制开启的情况下,你可以开启事件dumper来观察workers正在干什么:
$ celery -A proj events --dump
或者你也开启curses接口:
$ celery -A proj events
当监控完成后,你可以去使能事件机制:
$ celery -A proj control disable_events
celery status命令也是使用远程控制命令,它会显示集群中在线的workers:
$ celery -A proj status

Django定时器Celery+Redis(二)Celery配置和任务模块化 序言   在上一篇博客中记录了Celery的安装及初步简单使用,如果需要请前往查看Celery安装使用,本文在上一篇的环境基础上继续记录Celery的配置使用及配置分离。前一篇博客的例子是将Celery的实例配置和任务都写在了tasks.py的python文件中,这在多模块任务或者大型项目(需要自定义很多的Celery配置)中就不太可取了,接下来我们将Celery的配置独立于一个文件。 ... 阅读详情

相关推荐

Django之Celery篇(二)

和settings.py文件同目录,一定不能建立在项目根目录,不然会引起 celery 这个模块名的命名冲突。apply_async的args参数需要以列表的形式传递。对象获取,需要传递任务ID,与Celery对象。获取Celery的任务结果可以通过。apply_async( )方法。切换到项目目录中,执行命令。delay( )方法。判断任务执行是否成功。判断任务执行是否失败。

Calor13的博客 1256

Celery查看任务执行状态

使用AsyncResult就可以通过id找对应任务的执行状态了 from celery.result import AsyncResult task = AsyncResult("your-task-id") status = task.status 但是看stackoverflow第二个回答,确实也是我的一大问题,如果在执行状态还是显示PENDING。另外如果task_id根本找不到,celery也是返回PENDING的。作者说的是要有一个独立于Celery的存储,我这边是使用了MongoDB存储各个任

9687

基于STM32的智能火灾报警系统设计:多传感器融合与远程控制实现

本文详细介绍基于STM32单片机的智能火灾报警系统设计,采用多传感器融合技术(烟雾、温度、火焰检测)实现高精度火灾识别。系统集成远程控制与手机APP监控,通过加权决策算法降低误报率,提供多级响应策略,确保火灾预警的准确性与可靠性。

u5v6w7的博客 1102

记一次 Celery 任务 FAILURE 的 debug 过程({“status“: “FAILURE“, “result“: {“exc_type“: “NotRegistered“……)

之前有一个业务功能中用到了 Django + Celery 做异步任务,一开始都是各个产品独立创建 Docker 容器,但是后面服务器的负载太高了,所以就转为了各个产品的后端用 Docker 创建容器,而像 MySQL 和 Redis 这种则是直接在服务器上进行操作。所以这就跟背景挂上钩了,因为失误,两个业务共用了一个 Redis 的桶来存 Celery 的任务,所以任务是被另外一个业务的 Celery 执行了,才会说。而且这个问题是偶发性的,有的时候会创建,有的时候不会创建。

Alex 1080

GPIB通讯的代码怎么写

GPIB(General Purpose Interface Bus)是一种用于连接计算机和测试设备的接口标准。 在写 GPIB 通讯的代码时,首先需要在计算机上安装 GPIB 驱动程序。然后,使用相应的编程语言和 GPIB 库函数来操作 GPIB 设备。 下面是一个使用 Python 语言和 pyvisa 库来实现 GPIB 通讯的示例代码: import visa# 创建 Visa 资源管理器...

weixin_35752645的博客 1545

银河麒麟(ky10)x86与arm双架构下编译zlmediakit的实战指南

本文提供了在银河麒麟(ky10)操作系统上,针对x86与arm双架构编译部署流媒体服务器zlmediakit的完整实战指南。文章详细阐述了从环境准备、依赖安装、代码获取到编译构建与测试的全过程,重点解析了两种CPU架构下的关键差异与注意事项,帮助开发者高效完成国产化平台上的流媒体服务搭建。

weixin_29306875的博客 98

celery java_Celery的命令一览表

输入下面的命令获得帮助:celery--help将列出如下的信息(中文为我的注释):Usage: celery [options]用法:celery 命令 选项Show help screen and exit.显示帮助信息并退出。Options(选项):-A APP, --app=APP app instance to use (e.g. module.attr_name)-本次操作...

weixin_39609822的博客 418

《QGIS快速入门与应用基础》021:插件仓库 URL 获取与添加

详细介绍了在QGIS中添加第三方插件仓库的方法。首先强调必须从官方推荐、开源社区等可靠渠道获取插件仓库URL以确保安全性,并列出了4类可信获取渠道。文章分步骤讲解了URL添加流程,包括打开插件管理器设置面板、填写仓库信息、刷新缓存验证等操作。针对常见问题如URL格式错误、连接失败等提供了具体解决方案。最后总结指出,成功添加第三方仓库后即可直接搜索安装各类专业插件,从而扩展QGIS功能边界。全文注重实操指导,特别适合需要安装行业专用插件的QGIS用户参考。

LuckyHanMo的博客 463

celery任务状态监控

celery是python里常用的一个异步任务队列,使用celery可以大大简化搭建任务队列的工作。实际使用中可能会需要监控一些任务或者定时任务的运行状态。 这里就讲一下celery的任务状态监控相关的方法。 单独使用celery命令格式为 celery -A [proj] [cmd] 在django下使用时,用manage.py启动时则不需要-A参数,命令格式为 python manage....

mr~li的博客 1万+

手把手教你学simulink实例--基于Simulink的船舶动力装置性能评估与仿真

船舶动力装置是船舶运行的核心系统,其性能直接影响船舶的安全性、经济性和环保性。基于MATLAB/Simulink平台进行船舶动力装置性能评估与仿真是研究和优化船舶动力系统的重要手段。通过建模与仿真,可以分析动力装置在不同工况下的性能表现,并验证控制策略的有效性。本项目旨在构建一个完整的船舶动力装置性能评估与仿真模型,包括发动机建模、传动系统建模、负载分析以及性能评估模块,并通过仿真分析其动态响应和性能指标。

MHD0815的博客 972

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版下载及安装教程

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版网盘下载及安装教程

智慧空间实验室 2387

celery学习笔记(二)——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', b...

一只路过的小码农cxy 1635

世界职业院校技能大赛财经赛道项目参考逐字稿五

世界职业院校技能大赛财经赛道项目参考逐字稿五

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 129

Celery系列二:Celery高级属性

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34372728的博客 852

SiC MOSFET 失效机制详解

TDDB 指在相对较低电场(通常接近或略高于器件工作电压)下,长时间施加电压导致介电层(如栅氧化物)逐渐退化并最终击穿的现象。与即时击穿(Immediate Breakdown,由强电场直接引起)不同,TDDB 是时间相关的渐进过程,通常发生在数小时、几天甚至数年之后。核心过程:在 MOSFET 中,栅极与衬底之间施加电压时,电子通过量子隧道效应(Tunneling)注入介电层,形成缺陷或陷阱。这些缺陷积累,最终在介电层中形成导电路径(Conductive Path),导致短路和器件失效。统计特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 381

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Celery笔记二之celery项目建立、配置及加载方式介绍

我们建立了一个名为 proj 的文件夹作为我们的项目文件夹,其下有两个文件,celery.py 和 tasks.pycelery.py在这里,我们还是对 celery 进行了实例化的操作,但是在这里项目名称改为了 proj,也就是这个文件的上一级文件夹名称broker、backend 还是对应的配置但是因为对应的任务我们是单独以文件的形式引入,所以,在这里引入的方式是通过 include 的方式来实现的。

weixin_43354181的博客 1385

IMSL CNL 7.0.0 (x86-64)Crack

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

celery笔记二之建立celery项目、配置及几种加载方式

我们建立了一个名为 proj 的文件夹作为我们的项目文件夹,其下有两个文件,celery.py 和 tasks.pycelery.py在这里,我们还是对 celery 进行了实例化的操作,但是在这里项目名称改为了 proj,也就是这个文件的上一级文件夹名称broker、backend 还是对应的配置但是因为对应的任务我们是单独以文件的形式引入,所以,在这里引入的方式是通过 include 的方式来实现的。

woaimx_1314的博客 317

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC中sqlite的使用

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

Celery(二)Celery执行异步、延迟和定时任务

celery执行异步任务,celery启动,celery执行延迟任务,celery执行定时任务,celery注意事项

呀儿呦的博客 3229

Celery,就是要给你完美体验之celery快速入门(二)

一.项目中使用celery         我的项目目录:     TestCelery/ ├── proj │ ├── celeryconfig.py │ ├── celery.py │ ├── init.py │ └── tasks.py └── test.py  celery.py内容如下: from celery import Celery # 创建celery实例 app =...

sunchaoyiA的博客 437

Celery学习记录分享(二)

这个参数用于指定要使用的celery实例,格式为 module.path:attribut同时支持另一种比较快接的方式,如果只指定了包名,他会尝试按照以下的顺序搜索应用程序实例:如使用–app=proj一个名为proj.app的属性,或者一个名为proj.celery的属性,或者再模块proj中的任何属性,其中值为celery应用程序如果找不到这些内容,他将尝试查找proj.celery的子模块一个名为proj.celery.app的属性,或者。

wendychow001的博客 1233

异步任务利器Celery(二)在django项目中使用Celery

Celery 4.0支持django1.8及以上的版本,低于1.8的项目使用Celery 3.1。 一个django项目的组织如下: - proj/ - manage.py - proj/ - __init__.py - settings.py - urls.py 首先建立proj/proj/celery.py文件: from __

linux12a的博客 1718

RabbitMq +Celery(二)

前面我们基本了解了rabbitmq的相关概念,接下来我们就Rabbitmq的demo 一、安装 正常安装比较麻烦,这里推荐使用docker安装,关于docker的使用,请看我之前写过的一篇文章==>传送门 注意获取镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面 1.获取官方镜像: docker pull rabbitmq:management 2.启动镜像: # 方法一 后台启动, 默认用户名密码 guest:guest.

阿茂丶 745

Celery 快速入门(二)

Redis 本地安装并启动 Redis 安装此处不做过多讲述;请参考:Redis 安装传送门 启动本地 Redis 服务 redis-server /usr/local/etc/redis.conf 可以查看 Redis 动态日志 # 切换到安装 Redis 时日志配置文件路径 cd /Users/wawa/Logs ls -l # -rw-r--r-- 1 wawa staff...

weixin_39386145的博客 247

二、Celery执行一步任务

二、Celery执行异步任务 2.1、基本使用 创建项目celerypro 创建异步任务执行文件celery_task: import celery import time backend='redis://127.0.0.1:6379/1' broker='redis://127.0.0.1:6379/2' cel=celery.Celery('test',backend=backend,br...

qq_52804302的博客 211
上一篇: shell
下一篇: 运维一
qq_15551663
博客等级 码龄12年 4粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值