PyQt5:pyqtSignals 线程安全吗?
PyQt5 : are pyqtSignals thread safe?
我正在学习如何使用 PyQt5,但有很多地方让我难以理解。
我已经开始实现 QThreads 来替换我在我的 UI 中使用的线程,因为我意识到混合线程和 QThreads 可能会导致以后出现问题,并且已经开始同时使用 pyqtSignal
到目前为止,我已经看到 pyqtSygnal 需要在 class 级别上实现才能工作(将它放在 class 构造函数中不起作用)
在我目前使用的体系结构中,我有一个在主线程中实例化的 pyqtSignal,然后由所有子线程使用。这是因为有一个 class 负责我所有程序的日志。
我不确定这是否是一个好的实现。
这是我的问题:
- pyqtSignals 是线程安全的吗?
我知道他们使用队列系统来保证线程安全,但是 emit()
方法本身是线程安全的吗?我对他们的了解有点有限
- 我需要用锁来保护我的 pyqtSignals 吗?
- 我可以将多个不同的信号发射到同一个插槽而不会出现任何问题吗?
信号是 QObject 中为数不多的线程安全元素之一,因此没有必要保护数据。因此您可以将不同类型的信号连接到同一个插槽。
由于信号是线程安全的,因此 Qt 建议将生活在不同线程中的 QObject 进行通信。
我正在学习如何使用 PyQt5,但有很多地方让我难以理解。
我已经开始实现 QThreads 来替换我在我的 UI 中使用的线程,因为我意识到混合线程和 QThreads 可能会导致以后出现问题,并且已经开始同时使用 pyqtSignal
到目前为止,我已经看到 pyqtSygnal 需要在 class 级别上实现才能工作(将它放在 class 构造函数中不起作用)
在我目前使用的体系结构中,我有一个在主线程中实例化的 pyqtSignal,然后由所有子线程使用。这是因为有一个 class 负责我所有程序的日志。
我不确定这是否是一个好的实现。
这是我的问题:
- pyqtSignals 是线程安全的吗?
我知道他们使用队列系统来保证线程安全,但是emit()
方法本身是线程安全的吗?我对他们的了解有点有限 - 我需要用锁来保护我的 pyqtSignals 吗?
- 我可以将多个不同的信号发射到同一个插槽而不会出现任何问题吗?
信号是 QObject 中为数不多的线程安全元素之一,因此没有必要保护数据。因此您可以将不同类型的信号连接到同一个插槽。
由于信号是线程安全的,因此 Qt 建议将生活在不同线程中的 QObject 进行通信。