今天改的版本,突然间陷入 while loop 无法中止
强迫中止时错误讯息是
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/
threading.py", line 1388, in _shutdown
lock.acquire()
这种讯息有和没有差不多
有 lock 没有释放?
于是我写了个 MyLock 取代 threading.Lock
开始记录到底是哪个 Lock 有进入而没有退出
全都有退出!根本查不到
最后是透过 git 不断卷回旧版,找到十二小时前的版本还可以正常退出程式
一查,重点不在程式,在资料!
某一种资料格式,我会启动 Timer, 而 Timer 时间到后,我会再重启 Timer
(其实就是连续脉冲波,每隔几秒一次的意思)
因为我预约了下一次的执行需求,所以程式无法释放
只要 cancel timer, 就解掉这个 bug 了
(bug 是一直存在的,只是一直没键入这种资料凸显 bug)
还真是忘了,在 Python 的 Timer 是以 Thread 来实现
而骨子里可能设了个 lock
那我问题来了:这次是幸运在 git 里保存够多细节,且能卷回一定能释放的旧版
假设没这样的环境,只能靠我自己抓,而错误讯息又只说有 lock 没释放
我能回溯知道是哪一行程式产生的 lock 锁住了吗?
有什么参数,什么 debug tool 能用吗?
谢谢