如題,此篇文章記錄我如何使用 gdb 來查看一個卡住的 python 程式
過去工作時還真有遇過某段 python 程式碼卡住,然後看了半天看不出個所以然
當時會 debug 卡這麼久,有一個原因是我真的沒想到會卡在寫 log 的地方,如果馬上懷疑是寫 log 的程式碼卡住,大概 Google 一下就會查到這篇文章了吧:https://stackoverflow.com/questions/24509650/deadlock-with-logging-multiprocess-multithread-python-script
簡述一下卡住的原因:
這段程式碼是跑 multithread ,在 thread 上又做了 spawn process 的動作
假設現在有 t1, t2 兩個 thread,當中 t1 fork 生成 child process,若剛好此時 t2 在運行 logging.Handler.handle() critical section,t1 fork 出來的 child process 會複製到鎖住的 log handler lock 狀態,所以這個 child process 一旦要寫 log 就會卡住,因為 handler lock 的狀態是被占用的,而這狀態永遠不會被釋放,程式就這樣卡住了
[閱讀全文]