python celery库踩坑汇总

一、TimeLimit&SoftTimeLimit 的坑

celery 中 time limit 有两种, soft_time_limit 和 time_limit, 区别是 soft_time_limit 会在内部抛一个 Exception, task 可以 通过try...except 自行处理,time_limit则是中断woker重启没法被catch做一些操作。

from myapp import app 
from celery.exceptions 
import SoftTimeLimitExceeded 
@app.task
def mytask():try:         do_work() except SoftTimeLimitExceeded:        clean_up_in_a_hurry()

经过本人反复实验, 只有celery pool 的默认模式prefork,同时支持上面两种超时处理,两种协程模式gevent和eventlet不支持soft_time_limit,最坑爹的solo模式怎么配置都毫无作用。

以下是 Celery 支持的一些常见并发模式:

  1. solo:默认模式,工作进程在单个进程中顺序执行任务。

  2. prefork:传统的 UNIX 方式,工作进程会创建多个子进程来并行执行任务。

  3. eventlet:基于 Eventlet 库,使用协程来实现并发。

  4. gevent:基于 Gevent 库,使用绿色线程来实现并发。

  5. threads:使用 Python 的标准库 threading 模块来创建一个线程池。

  6. processes:使用 Python 的 multiprocessing 模块来创建一个进程池。

  7. aiopg:使用异步进程池,基于 asynciomultiprocessing

解决方案

自己实现task的超时捕捉异常返回的操作。

python常用定义超时异常的方法有func-timeout库

也可以通过自定义装饰器,或者魔法模块contextlib来实现。

我这里具体任务是处理视频,根据视频长度不同来设置不同的超时是最优化的方案,因此我用contextlib来实现超时捕获

import signal
from contextlib import contextmanager
# 自定义超时异常
class TimeoutError(Exception):def __init__(self, msg):super(TimeoutError, self).__init__()self.msg = msg
​
@contextmanager
def timeout(interval):def _handler(signum,frame):raise TimeoutError(f"任务超时!")try:signal.signal(signal.SIGALRM,_handler)signal.alarm(interval)  # interval秒后向进程发送SIGALRM信号yield# except TimeoutError as e:#     raise TimeoutError(e)finally:signal.alarm(0)

使用时

try:with timeout(limit_time):dowork()
except TimeoutError as e:clean_up_in_a_hurry()

值得注意的是,该方法是python在linux下的超时,windows下不支持signal库需要用别的方法。

目前用下来celery的坑还是不少的(包括监控flower的时间的坑),执行效率其实也不咋地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544758.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

HTML5基本概念及其基本框架

HTML是超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用来结构化 Web 网页及其内容的标记语言。网页内容可以是:一组段落、一个重点信息列表、也可以含有图片和数据表。 H5的DOCTYPE的声…

新手操作指引:快速上手腾讯混元大模型

引言 腾讯混元大模型是一款功能强大的AI工具,适用于文本生成、图像创作和视频生成等多种应用场景。对于新手用户,快速上手并充分利用这一工具可能会有些挑战。本文将提供详细的新手操作指引,帮助您轻松开始使用腾讯混元大模型。 步骤一&…

PyTorch模型转ONNX量化模型

你是否发现模型太大,无法部署在你想要的云服务上?或者你是否发现 TensorFlow 和 PyTorch 等框架对于你的云服务来说太臃肿了?ONNX Runtime 可能是你的救星。 如果你的模型在 PyTorch 中,你可以轻松地在 Python 中将其转换为 ONNX…

智能感知,主动防御:移动云态势感知为政企安全护航

数字化时代,网络安全已成为企业持续运营和发展的重要基石。随着业务扩展,企业资产的数量急剧增加,且分布日益分散,如何全面、准确地掌握和管理资产成为众多政企单位的难题。同时,传统安全手段又难以有效应对新型、隐蔽…

你的提交信息还在拖后腿?看这里,提升代码质量的绝招!

文章目录 前言一、什么是约定式提交?二、创建新仓库三、将代码推送到远程仓库的步骤1.检查当前远程仓库2.添加代码到暂存区3. 进行约定式提交4. 推送代码到远程仓库5. 完成推送 总结 前言 在当今软件开发领域,Git已经成为最广泛使用的版本控制系统之一。…

二阶滤波算法总结(对RC滤波算法整理的部分修正和完善)

文章目录 1、一阶低通滤波2、一阶高通滤波3、二阶低通滤波器3.1 二阶RC低通滤波器的连续域数学模型3.2 二阶RC低通滤波器的算法推导3.3 matlab仿真 4、二阶高通滤波器4.1 二阶RC高通滤波器的连续域数学模型4.2 二阶RC高通滤波器的算法推导4.3 matlab仿真 5、陷波滤波6、带通滤波…

白杨SEO:从小红书、抖音图文再到小绿书,为什么现在制作图文内容搞SEO搜索精准流量更容易?

前言:为什么想到写这个?上周参加了一个杭州公司游学,发现大家现在做SEO精准流量都在用图文方式来搞了,还有做小绿书也越来越多了,所以分享给大家,看完对大家有一些启发。 文章大纲: 1、图文是什…

2024年AI技术爆发的元年,用对工具,让你副业比主业赚得多!

大家好,我是强哥 文字的力量不容小觑,或许你没有多好的文笔,或许你已经很久没有拿笔写字了,但是没关系,我们有工具! AI时代的到来,不会用工具,那你可就OUT了 如果你觉得文字不能赚…

产业报告丨2024中国AI大模型场景探索及产业应用调研报告(附下载)

前言 AI大模型是指在机器学习和深度学习领域中,采用大规模参数(至少在一亿个参数以上)的神经网络模型,AI大模型在训练过程中需要依赖大量的算力和高质量的数据资源。2024年,AI大模型的行业应用与技术发展正有效提升千…

2024年 AI大模型我该买一张什么卡?

有钱啥也不用说,买张最贵的就是了。对囊中羞涩的我还说,我该买张什么样的显卡呢? 我的旧显卡RTX1060 6G,满负荷消耗功率110多瓦,几乎达到设计最大TDP,周日时拿了朋友的RTX3060Ti 8G,发现是锁算…

Kaggle-狗种类的识别(Pytorch框架)基本图像识别流程

狗类别实现过程 一. 将数据集按标签分类,将标签转换为数字表示,并制作数据集 二. 搭建网络框架,inception,或者ResNet 三. 选择优化函数,训练模型 数据集制作 首先分析数据集,题中已经很明确告诉有120 种…

【2024W32】肖恩技术周刊(第 10 期):太阳神鸟

周刊内容: 对一周内阅读的资讯或技术内容精品(个人向)进行总结,分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率,每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…

LeetCode 刷题基础Ⅰ -- 基础语法

c 基础语法,LeetCode 刷题用 学习网站一、顺序结构基本数据类型① 整型 int② 长整型 long③ 浮点型 double④类型转换 输入输出① getchar 吸收回车符② 数学函数③ 最大值的定义 二、选择结构① switch 三、数组① 初始化② 输入③ 方法 四、结构体① 自定义结构体…

UE5地图白屏/过曝/非常亮の解决方法

今天遇到一个问题 , 新建项目 , 打开虚幻第三人称地图的默认关卡 , 发现白屏 , 啥也看不见 猜测可能是虚幻编辑器的bug , 造成白屏的原因应该是场景过曝了 记录一下解决方案 第一种解决方法 找到场景中的 后期处理体积 (PostProcessVolume) 直接删掉 或者找到 细节面板中 -…

【Transformers基础入门篇5】基础组件之Datasets

文章目录 一、简介二、Datasets基本使用2.1 加载在线数据集(load_dataset)2.2 加载数据集某一项任务(load_dataset)2.3 按照数据集划分进行加载(load_dataset)2.4 查看数据集(index and slice&a…

数据库课程 CMU15-445 2023 Fall Project-2 Extendible Hash Index

0 实验结果 tips:完成项目的前提不需要一定看视频 1 数据结构:扩展哈希 解释下这张图: 图中header的最大深度2,directory最大深度2,桶的容量2。 最开始的时候只有一个header。 插入第一个数据,假设这个数据对应的哈希…

洛汗2保姆级辅助教程攻略:VMOS云手机辅助升级打怪!

在《洛汗2》中,玩家将进入一个充满魔幻色彩的西方世界,体验多种族文明的兴衰与冒险。为了更好地享受这款由普雷威(Playwith)开发的角色扮演动作手游,使用VMOS云手机将是一个明智的选择。VMOS云手机专为游戏打造了定制版…

基于SSM的“在线CRM管理系统”的设计与实现(源码+数据库+文档+开题报告)

基于SSM的“在线CRM管理系统”的设计与实现(源码数据库文档开题报告) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能模块图 登录页面 后台管理页面 产品信息页面 客…

JSP(Java Server Pages)基础使用二

简单练习在jsp页面上输出出乘法口诀表 既然大家都是来看这种代码的人了&#xff0c;那么这种输出乘法口诀表的这种简单算法肯定是难不住大家了&#xff0c;所以这次主要是来说jsp的使用格式问题。 <%--Created by IntelliJ IDEA.User: ***Date: 2024/7/18Time: 11:26To ch…

consul注册中心与容器自动发现实战

consul简介 Consul 是 HashiCorp 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案&#xff0c;不再需要依赖其它工具&#xff08;比如 ZooKeeper 等&#xff0…