我正在開發中等復雜度的 PyQt5 應用程式。它有各種小部件(本機和第三方)和 Qthreads。它大部分時間都很好,但大約有 5 次應用程式在我退出后掛在后臺。
這是我的定義closeEvent:
def closeEvent(self, event):
qApp.quit()
而且我還定義了一個 quit_action 并將其連接到qApp.quit()這樣的:
self.quit_action.triggered.connect(qApp.quit)
我以標準方式啟動 PyQt5 應用程式:
app = QApplication([])
window = GUIWindow()
window.show()
sys.exit(app.exec())
我不知道如何除錯這種奇怪的錯誤。它僅在幾次中發生一次,我無法重現該錯誤。
我在控制臺中運行應用程式:
python main.py
通常我可以毫無問題地關閉應用程式。但是在我關閉應用程式(通過單擊視窗的“x”按鈕或通過觸發選單中的 quit_action )后幾次,視窗消失并且行程在后臺掛起。我必須按“Ctlr Z”然后終止行程。
除錯這種奇怪錯誤的策略是什么?如何找到導致應用程式凍結的確切原因?
uj5u.com熱心網友回復:
這種錯誤很難隔離。看起來我的特定錯誤是由于應用程式的幾個小部件的組合而出現的,甚至很難提供一個重現該錯誤的最小作業示例。更不用說錯誤只在幾次運行中發生一次。
看起來我通過檢查 gdb 的掛起行程找到了該錯誤的罪魁禍首(請參閱來自 stackoverflow 的問題Is there a way to attach a debugger to a multi-threaded Python process?)。
當我的應用程式再次凍結時 - 我通過 gdb 附加到行程,調查執行緒并找到有問題的執行緒。
編輯:即使 qApp.quit() 沒有幫助,也可以關閉 PyQt 應用程式的臨時解決方案:
def closeEvent(self, event):
qApp.quit()
sys.exit()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/526397.html
上一篇:在腳本中實作多執行緒/并行處理
