今天改的版本,突然間陷入 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 能用嗎?
謝謝