多线程bug处理记录
原创:多线程bug处理记录
多线程bug处理记录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Thread(target=func02) while True:dataA=DataA()dataA.data=[[[xx,yy]]]xxx,yyy,zzz,dataA.data=[[[xx,yy]],[[ff,zz]]]assert len(dataA.data)>1,error data#标记01self.queue.put(dataA)func02():dataA=self.queue.get()assert len(dataA.data)>1,error data#标记02 |
问题:func02获取的data有时为一维的,而理论上应该是二维的
添加标记01,标记02后发现,标记01是ok的(说明存放时的确是二维的),但标记02却偶然有报错(偶尔,而非绝对)
修改测试01,queue不支持多维数据存放?不大可能,经过独立测试,的确没有问题,可以存放
修改测试02,将多线程改为顺序执行,问题不存在=>说明是多线程导致的问题
当然最终也发现问题了,这也是多线程最常出现的问题,就是“以为没共享的数据,其实共享了”在博客python进阶12并发之八多线程与数据同步中也强调过,但不经意间依然会掉坑里。
其实对于此类问题,最好的调试方式是,出问题的是queue,那么就打印所有操作quque的地方,就可以发现queue其实会在2个线程中被操作,即使queue本身的存取是原子的,由于存放的数据是引用类型,所以queue临近的代码“上下文”,其实都属于“临界区”。需要“特殊防范”。
最简单的处理方式是self.queue.put(copy.deepcopy(dataA)),这样就彻底隔离了不同线程的数据,避免了一些隐患。
多线程bug处理记录相关推荐
- ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录
ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值--bug调试记录 目录 输出结果 1.增加XGBR算法 ...
- boost::log模块实现多线程异步日志记录示例
boost::log模块实现多线程异步日志记录示例 实现功能 C++实现代码 实现功能 boost::log模块实现多线程异步日志记录示例 C++实现代码 #include <stdexcept ...
- linux 多线程 写日志,rsyslog多线程远程日志记录介绍(lamp+rsyslog)
rsyslog多线程远程日志记录介绍(lamp+rsyslog) rsyslog: rsyslog: 多线程: 支持UDP, TCP, SSL, TLS, RELP远程日志记录 rsyslog支持将日 ...
- 软件测试bug文档模板,软件bug测试记录模板
软件bug测试记录模板 XXX软件bug测试记录表 文档编号: 背景信息 项目名称 测试目的 硬件环境 软件环境 测试时间 测试人员 测试说明 1.严重等级: A-Crash(崩溃的):由于程序所引起 ...
- 基于FPGA的FOC电流采样Bug调试记录
#基于FPGA的FOC电流采样Bug调试记录 博主在调试FOC闭环控制中遇到了一个bug,冥思苦想两三天,最终一步步地调试时序,最终找到了bug,在调试过程中学会了debug的思想,也明白了调试过程中 ...
- 【vue-seamless-scroll bug问题记录以及解决】
vue-seamless-scroll bug问题记录以及解决 vue-seamless-scroll 的使用方式,请查看网站链接: 组件官方示例. 问题1:无法自动滚动 解决方案: ①排查limit ...
- 【多线程】学习记录七种主线程等待子线程结束之后在执行的方法
最近遇到一个问题需要主线程等待所有的子线程结束,才能开始执行,统计所有的子线程执行结果,返回,网上翻阅各种资料,最后记录一下,找到七种方案 第一种:while循环 对于"等待所有的子线程结束 ...
- openmv 神经网络 超出内存_【openmv】openmv各种bug问题记录
一 已解决的bug (一)python语言使用错误 1.for循环后未加冒号/def 函数后未加冒号/缩进不对 SyntaxError: invalid syntax 例子: def callback ...
- 一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
一条Bug记录最基本应包含: bug编号: bug严重级别,优先级: bug产生的模块: 首先要有bug摘要,阐述bug大体的内容: bug对应的版本: bug详细现象描述,包括一些截图.录像-等等: ...
最新文章
- 如何设计一个深度学习项目
- python支付程序源码_python项目中实现支付宝网页支付
- 无符号数的减法_C++核心准则ES.107:不要使用无符号数下标,使用gsl::index更好
- php控制器是啥,控制器的定义
- 当当网头部和尾部——CSS源码
- javascript 分号_让我们谈谈JavaScript中的分号
- 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
- 关于蛙跳算法的计算机文献,文化蛙跳算法性能分析研究.PDF
- 读写分离MYSQL类
- Bootstrap3学习笔记
- CDA第九届认证考试数据报告重磅发布!
- 区块链专利申请全球过半 厉害了我的国
- 微信小程序WebSocket使用案例
- android 日历动画的实现
- 动物识别系统代码python_动物识别系统 代码
- EChat(简易聊天项目)四、模拟强制下线
- iqoo3可以安装鸿蒙系统吗,鸿蒙系统属于安卓吗?
- 汽车倒车雷达系统设计
- 如何用Visual C#来创建、修改注册信息
- Burnside引理的简要证明
热门文章
- IP数据报格式,IP分片,IP编址,子网掩码
- Python爬虫开发【第1篇】【机器视觉及Tesseract】
- POJ 3254 Corn Fields (状态压缩)
- Redis3.2.5 集群搭建以及Spring-boot测试
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals
- C# XML文件操作类XmlHelper
- 【Android】spannableStringBuilder
- SpringMVC 之类型转换Converter 源代码分析
- 综合对比各个设计模式的思想
- java9 javascript_JS(JavaScript)的j进一步了解9(更新中···)