【发布时间】:2013-04-21 00:09:02
【问题描述】:
我正在用 Python 线程(包括守护程序)做一些棘手的事情。
我在某些测试中遇到间歇性错误:
Exception in thread myconsumerthread (most likely raised during interpreter shutdown):
请注意,没有提供堆栈跟踪/异常详细信息。
仔细检查我自己的代码并没有帮助,但我对调试的下一步有点茫然。 我可以使用哪些调试技术来详细了解关闭期间哪些异常可能导致运行时中断?
细则:
- Windows、CPython、2.7.2 - 无法在 Ubuntu 上重现。
- 大约 3% 的时间会出现问题 - 重现性好,只是不可靠。
- myconsumerthread 中的代码有一个包罗万象的异常处理程序,它尝试将异常名称写入
sys.stderr。 (sys会不会已经被关闭了?) - 我怀疑这个问题与关闭守护线程非常快有关;在他们完全初始化之前。 this 区域中的某些内容,但我几乎没有证据 - 肯定不足以指向 Python 错误。
- 哈,我发现了一种新症状,标志着我陷入精神错乱的转折点!
- 如果我在我的测试工具(不是实时代码)中
import time,并且从不使用它,频率会下降到大约 0.5%。 - 如果我在我的测试工具中
import turtle(我以我的生命发誓,我的代码中没有海龟图形;我选择了这个作为我能快速找到的最不相关的库)异常开始在不同的线程,并且它发生在大约三分之一的运行中。
- 如果我在我的测试工具(不是实时代码)中
【问题讨论】:
-
放弃最后一个想法。我的导入在线程启动之前完成。
-
@Patashu:#1:指向多处理;我正在使用线程。 #2:指向bugs.python.org/issue1856,这可能是相关的,但直到3.2才修复:-(无法检查它是否是同一个错误。#3:OP正在使用 del 不恰当。我从不使用 del。-这些都是很好的线索,谢谢。不幸的是,我仍然无法调试来查找我是否有同样的问题. 迁移到 3.x 只是为了消除这个关闭错误并不是我本周要做的事情的清单。叹息。
-
是否生成多个
myconsumerthread线程?
标签: python multithreading daemon