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