簡體   English   中英

當連接類型 = Qt.DirectConnection 時,來自線程對象的 PyQt5 信號會導致段錯誤

[英]PyQt5 signal from threaded object causes segfault when connection type = Qt.DirectConnection

我有一些下載一組文件的 PyQt5 python 代碼。 我使用 multiprocessing.dummy 作為線程的包裝器,使用 apply_async 來獲得同步下載。 從我的線程函數中,我想更新主 gui 中的進度條,但是當我這樣做時,QT 為信號選擇了一個排隊連接,並且主線程中播放下載文件的函數開始(文件已下載),然后,進度條會突然更新,報告文件正在下載,即使它們之前已經下載了一段時間。

如果我使用 Qt.DirectConnection 創建信號,我會得到所需的行為,但在下載文件后,我會出現段錯誤,並且主線程退出。 我相信一定有辦法解決這個問題,因為這不是一項不尋常的任務,但是在嘗試了互斥鎖、信號到信號以及其他一些嘗試后,我幾乎要脫光頭發了。 我相信答案是顯而易見的。

我在這里閱讀了其他類似問題的答案,但沒有什么特別有啟發性的。

PyQt5 信號和線程

建議從創建的線程內部進行連接,但我不願意嘗試這個,因為線程是在一個類中創建的,該類被組合到主線程中的自定義對象中,我真的不想向下傳遞引用等級制度。 如果我必須這樣做,我想,但我嘗試在線程函數內連接一個信號來調用類內的方法,然后調用該信號,但沒有運氣,結果相同。

提前謝謝了。

我最終發現段錯誤是由我在調用 thread_pool.apply_async 后從主線程加入線程池引起的。 我刪除了 close 和 join 語句,信號上的直接連接按預期工作正常。 我繼續收到警告:

QObject::setParent: Cannot set parent, new parent is in a different thread

但該程序按預期工作。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM