原创:多线程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处理记录相关推荐

  1. ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录

    ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值--bug调试记录 目录 输出结果 1.增加XGBR算法 ...

  2. boost::log模块实现多线程异步日志记录示例

    boost::log模块实现多线程异步日志记录示例 实现功能 C++实现代码 实现功能 boost::log模块实现多线程异步日志记录示例 C++实现代码 #include <stdexcept ...

  3. linux 多线程 写日志,rsyslog多线程远程日志记录介绍(lamp+rsyslog)

    rsyslog多线程远程日志记录介绍(lamp+rsyslog) rsyslog: rsyslog: 多线程: 支持UDP, TCP, SSL, TLS, RELP远程日志记录 rsyslog支持将日 ...

  4. 软件测试bug文档模板,软件bug测试记录模板

    软件bug测试记录模板 XXX软件bug测试记录表 文档编号: 背景信息 项目名称 测试目的 硬件环境 软件环境 测试时间 测试人员 测试说明 1.严重等级: A-Crash(崩溃的):由于程序所引起 ...

  5. 基于FPGA的FOC电流采样Bug调试记录

    #基于FPGA的FOC电流采样Bug调试记录 博主在调试FOC闭环控制中遇到了一个bug,冥思苦想两三天,最终一步步地调试时序,最终找到了bug,在调试过程中学会了debug的思想,也明白了调试过程中 ...

  6. 【vue-seamless-scroll bug问题记录以及解决】

    vue-seamless-scroll bug问题记录以及解决 vue-seamless-scroll 的使用方式,请查看网站链接: 组件官方示例. 问题1:无法自动滚动 解决方案: ①排查limit ...

  7. 【多线程】学习记录七种主线程等待子线程结束之后在执行的方法

    最近遇到一个问题需要主线程等待所有的子线程结束,才能开始执行,统计所有的子线程执行结果,返回,网上翻阅各种资料,最后记录一下,找到七种方案 第一种:while循环 对于"等待所有的子线程结束 ...

  8. openmv 神经网络 超出内存_【openmv】openmv各种bug问题记录

    一 已解决的bug (一)python语言使用错误 1.for循环后未加冒号/def 函数后未加冒号/缩进不对 SyntaxError: invalid syntax 例子: def callback ...

  9. 一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

    一条Bug记录最基本应包含: bug编号: bug严重级别,优先级: bug产生的模块: 首先要有bug摘要,阐述bug大体的内容: bug对应的版本: bug详细现象描述,包括一些截图.录像-等等: ...

最新文章

  1. 如何设计一个深度学习项目
  2. python支付程序源码_python项目中实现支付宝网页支付
  3. 无符号数的减法_C++核心准则ES.107:不要使用无符号数下标,使用gsl::index更好
  4. php控制器是啥,控制器的定义
  5. 当当网头部和尾部——CSS源码
  6. javascript 分号_让我们谈谈JavaScript中的分号
  7. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
  8. 关于蛙跳算法的计算机文献,文化蛙跳算法性能分析研究.PDF
  9. 读写分离MYSQL类
  10. Bootstrap3学习笔记
  11. CDA第九届认证考试数据报告重磅发布!
  12. 区块链专利申请全球过半 厉害了我的国
  13. 微信小程序WebSocket使用案例
  14. android 日历动画的实现
  15. 动物识别系统代码python_动物识别系统 代码
  16. EChat(简易聊天项目)四、模拟强制下线
  17. iqoo3可以安装鸿蒙系统吗,鸿蒙系统属于安卓吗?
  18. 汽车倒车雷达系统设计
  19. 如何用Visual C#来创建、修改注册信息
  20. Burnside引理的简要证明

热门文章

  1. IP数据报格式,IP分片,IP编址,子网掩码
  2. Python爬虫开发【第1篇】【机器视觉及Tesseract】
  3. POJ 3254 Corn Fields (状态压缩)
  4. Redis3.2.5 集群搭建以及Spring-boot测试
  5. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals
  6. C# XML文件操作类XmlHelper
  7. 【Android】spannableStringBuilder
  8. SpringMVC 之类型转换Converter 源代码分析
  9. 综合对比各个设计模式的思想
  10. java9 javascript_JS(JavaScript)的j进一步了解9(更新中···)