当前位置: 首页 > news >正文

Celery task 执行报错 TypeError: Object of type set is not JSON serializable 问题分析处理

情况描述:

定义了新的shared_task推送到生产环境后,发现无法执行,会报错set对象无法序列化,报错内容如下:

Traceback (most recent call last):File "/tmp/venv/lib64/python3.6/site-packages/kombu/serialization.py", line 50, in _reraise_errorsyieldFile "/tmp/venv/lib64/python3.6/site-packages/kombu/serialization.py", line 221, in dumpspayload = encoder(data)File "/tmp/venv/lib64/python3.6/site-packages/kombu/utils/json.py", line 70, in dumps**dict(default_kwargs, **kwargs))File "/tmp/venv/lib64/python3.6/site-packages/simplejson/__init__.py", line 412, in dumps**kw).encode(obj)File "/tmp/venv/lib64/python3.6/site-packages/simplejson/encoder.py", line 296, in encodechunks = self.iterencode(o, _one_shot=True)File "/tmp/venv/lib64/python3.6/site-packages/simplejson/encoder.py", line 378, in iterencodereturn _iterencode(o, 0)File "/tmp/venv/lib64/python3.6/site-packages/kombu/utils/json.py", line 59, in defaultreturn super(JSONEncoder, self).default(o)File "/tmp/venv/lib64/python3.6/site-packages/simplejson/encoder.py", line 273, in defaulto.__class__.__name__)
TypeError: Object of type set is not JSON serializableDuring handling of the above exception, another exception occurred:Traceback (most recent call last):File "/tmp/venv/lib64/python3.6/site-packages/celery/app/trace.py", line 449, in trace_taskuuid, retval, task_request, publish_result,File "/tmp/venv/lib64/python3.6/site-packages/celery/backends/base.py", line 149, in mark_as_doneself.store_result(task_id, result, state, request=request)File "/tmp/venv/lib64/python3.6/site-packages/celery/backends/base.py", line 342, in store_resultrequest=request, **kwargs)File "/tmp/venv/lib64/python3.6/site-packages/django_celery_results/backends/database.py", line 19, in _store_resultcontent_type, content_encoding, result = self.encode_content(result)File "/tmp/venv/lib64/python3.6/site-packages/django_celery_results/backends/database.py", line 52, in encode_contentcontent_type, content_encoding, content = self._encode(data)File "/tmp/venv/lib64/python3.6/site-packages/celery/backends/base.py", line 297, in _encodereturn dumps(data, serializer=self.serializer)File "/tmp/venv/lib64/python3.6/site-packages/kombu/serialization.py", line 221, in dumpspayload = encoder(data)File "/usr/lib64/python3.6/contextlib.py", line 99, in __exit__self.gen.throw(type, value, traceback)File "/tmp/venv/lib64/python3.6/site-packages/kombu/serialization.py", line 54, in _reraise_errorsreraise(wrapper, wrapper(exc), sys.exc_info()[2])File "/tmp/venv/lib64/python3.6/site-packages/vine/five.py", line 194, in reraiseraise value.with_traceback(tb)File "/tmp/venv/lib64/python3.6/site-packages/kombu/serialization.py", line 50, in _reraise_errorsyieldFile "/tmp/venv/lib64/python3.6/site-packages/kombu/serialization.py", line 221, in dumpspayload = encoder(data)File "/tmp/venv/lib64/python3.6/site-packages/kombu/utils/json.py", line 70, in dumps**dict(default_kwargs, **kwargs))File "/tmp/venv/lib64/python3.6/site-packages/simplejson/__init__.py", line 412, in dumps**kw).encode(obj)File "/tmp/venv/lib64/python3.6/site-packages/simplejson/encoder.py", line 296, in encodechunks = self.iterencode(o, _one_shot=True)File "/tmp/venv/lib64/python3.6/site-packages/simplejson/encoder.py", line 378, in iterencodereturn _iterencode(o, 0)File "/tmp/venv/lib64/python3.6/site-packages/kombu/utils/json.py", line 59, in defaultreturn super(JSONEncoder, self).default(o)File "/tmp/venv/lib64/python3.6/site-packages/simplejson/encoder.py", line 273, in defaulto.__class__.__name__)
kombu.exceptions.EncodeError: Object of type set is not JSON serializable

初步分析

a.考虑是task调用过程中,参数传输过程异常,导致参数无法序列化,因为set 就是{1,2} 这种格式的,命令行验证没问题
b.考虑是其他模块有异常,发现其他模块的定时任务能正常执行
c.在测试环境能完整复现,但是由于celery 的调用无法调试,无法得到有效的反馈
d.命令行直接执行task函数不会报错,所以函数逻辑应该没有问题
e.最终发现是结果集里面存在set集合,导致后续结果传输的过程中无法解析成json,至此问题确定

解决办法:

将set转换成其他数据结构

总结:

a.对于原先测试验证能通过,修改后无法验证通过的,要先找到变更的内容,修改后要验证
b.这次花费时间较长是因为认为原先验证过,认为后续小的修改没有影响,导致思路不对,修改代码要验证,不要过于自信
c.对于celery这种无法调试的调用过程,复现存在难度,那就需要从函数逻辑,返回结果里面找答案
d.可能会转换成json格式的数据,一定不能包含set集合
e.其他:@shared_task 注解的函数,会加载到内存里面,需要重启Celery才会重新加载

相关文章:

Celery task 执行报错 TypeError: Object of type set is not JSON serializable 问题分析处理

情况描述: 定义了新的shared_task推送到生产环境后,发现无法执行,会报错set对象无法序列化,报错内容如下: Traceback (most recent call last):File "/tmp/venv/lib64/python3.6/site-packages/kombu/serializati…...

【大魔王送书第一期】《一名阿里服务端开发工程师的进阶之路》

一、前言 目前,资讯、社交、游戏、消费、出行等丰富多彩的互联网应用已经渗透到了人们生活和工作的方方面面,正深刻改变着信息时代。随着用户规模的增长和应用复杂度的上升,服务端面临的技术挑战越来越严峻。在头部互联网企业,服…...

[FPGA IP系列] BRAM IP参数配置与使用示例

FPGA开发中使用频率非常高的两个IP就是FIFO和BRAM,上一篇文章中已经详细介绍了Vivado FIFO IP,今天我们来聊一聊BRAM IP。 本文将详细介绍Vivado中BRAM IP的配置方式和使用技巧。 一、BRAM IP核的配置 1、打开BRAM IP核 在Vivado的IP Catalog中找到B…...

react ts

一、项目搭建 1、创建项目 使用vite生成项目 npx create-react-app react-ts-project --template typescript 启动项目 yarn start 删除无用组件 2、设计目录结构 资源说明http网络请求assets公共资源components组件router路由配置utils工具模块store状态机App.tsx应用…...

配置MySQL

配置MySQL_5.7.16 一级目录2.1.1 安装包准备2.1.2 安装MySQL2.1.3 配置MySQL 一级目录 2.1.1 安装包准备 1)将安装包和JDBC驱动上传到/opt/software,共计6个 01_mysql-community-common-5.7.16-1.el7.x86_64.rpm 02_mysql-community-libs-5.7.16-1.el…...

GFPGAN 集成Flask 接口化改造

GFPGAN是一款腾讯开源的人脸高清修复模型,基于github上提供的demo,可以简单的集成Flask以实现功能接口化。 GFPGAN的安装,Flask的安装请参见其他文章。 如若使用POSTMAN进行测试,需使用POST方式,form-data的请求体&am…...

vue数字输入框

目录 1.emitter.JS function broadcast (componentName, eventName, params) {this.$children.forEach(child > {var name child.$options.componentNameif (name componentName) {child.$emit.apply(child, [eventName].concat(params))} else {broadcast.apply(child, …...

JavaScript—BOM

BOM是什么? Browser Object Model是浏览器对象模型 官方:浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构,BOM由多个对象构成,其中代表浏览器窗口的window对象是BOM的顶层对象,其他对象都是该…...

C# SocketException(0x2746) asp.net一个现有的连接被远程主机强行关闭

问题原因 如果网页能正常访问,那就是TLS版本支持的问题。 我遇到的问题是: 项目用的是NET Framework 4.6.1,但是 learn.microsoft.com 提到 NET Framework 4.6及更早版本 不支持 TLS 1.1 和 TLS 1.2。 NET Framework 4.6.2 及更高版本 支持 …...

博客系统后端(项目系列2)

目录 前言 : 1.准备工作 1.1创建项目 1.2引入依赖 1.3创建必要的目录 2.数据库设计 2.1博客数据 2.2用户数据 3.封装数据库 3.1封装数据库的连接操作 3.2创建两个表对应的实体类 3.3封装一些必要的增删改查操作 4.前后端交互逻辑的实现 4.1博客列表页 …...

随机化快速排序(Java 实例代码)

随机化快速排序 一、概念及其介绍 快速排序由 C. A. R. Hoare 在 1960 年提出。 随机化快速排序基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数…...

JVM 垃圾收集

垃圾收集 分代理论Java 堆的内存分区不同分代收集垃圾收集算法 分代理论 弱分代假说:绝大多数对象都是朝生夕灭,即绝大多数对象都是用完很快需要销毁的。强分代假说:熬过多次垃圾收集过程的对象就越难以消亡,即如果对象经过多次垃…...

kubesphere中部署grafana实现dashboard以PDF方式导出

1,部署grafana-image-renderer 2,部署grafana GF_RENDERING_SERVER_URL http://ip:30323/render #grafana-image-renderer地址 GF_RENDERING_CALLBACK_URL http://ip:32403/ #grafana地址 GF_LOG_FILTERS rend…...

【环境配置】Android-Studio-OpenCV-JNI以及常见错误 ( 持续更新 )

最近一个项目要编译深度学习的库,需要用到 opencv 和 JNI,本文档用于记录环境配置中遇到的常见错误以及解决方案 Invalid Gradle JDK configuration found failed Invalid Gradle JDK configuration foundInvalid Gradle JDK configuration found. Open…...

js 正则表达式 验证 :页面中一个输入框,可输入1个或多个vid/pid,使用英文逗号隔开...

就是意思一个输入框里面&#xff0c;按VID/PID格式输入,VID和PID最大长度是4,最多50组 1、页面代码 <el-form ref"ruleForm" :model"tempSet" :rules"rules" label-position"right"> <!-- 最多 50组&#xff0c;每组9个字符…...

【算法与数据结构】112、LeetCode路径总和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题通过计算根节点到叶子节点路径上节点的值之和&#xff0c;然后再对比目标值。利用文章【算法和数据…...

②matlab桌面和编辑器

目录 matlab编辑器练习 运行脚本 matlab编辑器练习 您可以通过点击灰色代码框在脚本中输入命令。 准备就绪后&#xff0c;您可以通过点击蓝色的提交按钮提交代码。 任务 在脚本中输入命令 r 3。 2.任务 在脚本中添加命令 x pi*r^2。 附加练习 当您在实时编辑器中完成…...

高亮img、pdf重点部分(html2canvas、pdfjs-dist、react-pdf)

可用业务场景 报销单据审批中&#xff0c;高亮发票部分 需求 后台返回一张图片或者pdf、返回一组坐标&#xff0c;坐标类型[number,number,number,number]&#xff0c;分别代表了x、y、width、height。需要根据坐标在图片上高亮出来坐标位置。如下图 高亮的坐标是&#xff1…...

18.神奇导航菜单指示器

效果 源码 <!DOCTYPE html> <html> <head> <title>Magic Menu Indicator | 03</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body><div class="navig…...

WPF+Prism+WebApi 学习总结

一、基本概念 WPF:WPF&#xff08;Windows Presentation Foundation&#xff09;是&#xff08;微软推出的&#xff09;基于Windows的用户界面框架&#xff0c;提供了统一的编程模型&#xff0c;语言和框架&#xff0c;做到了分离界面设计人员与开发人员的工作&#xff1b;WPF…...

智慧树自动刷课神器Autovisor:3分钟极速上手的完整指南

智慧树自动刷课神器Autovisor&#xff1a;3分钟极速上手的完整指南 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为智慧树平台的繁琐操作而烦恼吗&#…...

nnU-Net v2实战:从零开始配置环境与训练自定义医学影像数据集

1. 环境配置&#xff1a;搭建nnU-Net v2的基础舞台 第一次接触nnU-Net时&#xff0c;我踩过的最大坑就是环境配置。当时为了赶项目进度&#xff0c;直接用了现有的Python 3.8环境&#xff0c;结果在安装时各种报错&#xff0c;浪费了大半天时间。后来才发现&#xff0c;nnU-Net…...

Arm Neoverse CMN-700 HN-F寄存器架构与缓存一致性配置详解

1. Arm Neoverse CMN-700 HN-F寄存器架构概述在现代SoC设计中&#xff0c;一致性互连网络&#xff08;Coherent Mesh Network&#xff09;是实现多核处理器高效协同工作的核心基础设施。作为Arm Neoverse平台的关键组件&#xff0c;CMN-700通过其独特的网格拓扑结构和分布式节点…...

Qdrant客户端库实战:从向量数据库连接到生产级应用开发

1. 项目概述&#xff1a;从向量数据库到应用落地的桥梁如果你最近在折腾大模型应用&#xff0c;或者想给自己的产品加上一个“智能大脑”&#xff0c;那你大概率绕不开一个词&#xff1a;向量数据库。简单来说&#xff0c;它就像一个能理解“意思”的超级搜索引擎&#xff0c;不…...

猫抓插件:5分钟掌握浏览器资源嗅探的终极武器

猫抓插件&#xff1a;5分钟掌握浏览器资源嗅探的终极武器 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容无处不在的今天&#xff0c;你…...

从开源物理拼图游戏学习Unity 2D物理引擎与游戏架构设计

1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“openclaw-puzzle-game”。光看名字&#xff0c;你可能会觉得这又是一个普通的开源拼图游戏&#xff0c;但点进去仔细研究后&#xff0c;我发现它的设计思路和实现方式&#xff0c;对于想学习游戏开…...

基于Helm Chart的JupyterHub生产级部署与运维实战指南

1. 项目概述&#xff1a;为什么我们需要一个可扩展的JupyterHub部署方案&#xff1f;如果你在团队里负责过数据科学或机器学习平台的搭建&#xff0c;大概率会为Jupyter Notebook的部署和管理头疼过。单个Jupyter Notebook服务给一两个人用还行&#xff0c;一旦团队规模扩大到十…...

基于意图与技能解耦的智能对话系统构建指南

1. 项目概述&#xff1a;一个意图与技能驱动的AI对话引擎最近在折腾AI应用开发&#xff0c;特别是对话型AI助手时&#xff0c;发现一个核心痛点&#xff1a;如何让AI不仅能理解用户说了什么&#xff08;意图识别&#xff09;&#xff0c;还能精准地调用相应的功能&#xff08;技…...

数据分析师能力展示:从项目构建到报告呈现的完整指南

1. 项目概述&#xff1a;一个数据分析师的能力展示平台最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“dataanalyst-showcase”。光看名字&#xff0c;你可能会觉得这又是一个数据科学项目合集&#xff0c;但点进去仔细研究后&#xff0c;我发现它的定位非常精准——它不…...

【仅限前200名】Midjourney铂金印相专属Prompt库泄露:含17组经暗房验证的--v 6.2参数矩阵与胶片光谱校准模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney铂金印相的光学本质与历史语境 铂金印相&#xff08;Platinum Print&#xff09;并非数字时代的产物&#xff0c;而是一种诞生于1873年的古典摄影工艺——其影像由铂族金属&#xff08;主要是…...