在 PyQt 中使用執行緒
雖然 Qt 框架的某些部分是執行緒安全的,但其中大部分都不是。在 Qt 的 C++文件提供了一個很好的概述,其中類是可重入的(可用於例項化在多個執行緒中的物件)。以下規則是最受歡迎的:
- 你無法從主執行緒外部建立或訪問 Qt GUI 物件(例如,任何子類
QWidget
或類似的東西)。 - 即使 Qt 類是可重入的,也不能線上程之間共享對 Qt 物件的訪問,除非該類的 Qt 文件明確指出例項是執行緒安全的。
- 如果需要將 Qt 物件從一個執行緒移動到另一個執行緒,則可以使用
QObject.moveToThread()
(不適用於必須始終保留在主執行緒中的 Qt GUI 物件)。但請注意,該物件不得包含父物件。
根據此 Stack Overflow QA,如果你的執行緒打算以任何方式與 PyQt 互動,則不建議使用 Python 執行緒(即使 Qt 框架的那部分是執行緒安全的)。