python - PyQT 和线程

标签 python multithreading pyqt

我正在开发一个使用多线程从各种网络设备收集数据的应用程序。我正在使用 PyQT 在 GUI 上显示收集的数据。我在我的应用程序(而不是 QThread)中使用常规 python 线程(来自线程,线程)。为了在不同的线程上更新 GUI,我使用了一个锁 (thread.allocate_lock())。因此,无论何时发生 GUI 更新,我都会调用 lock, update GUI。对此有任何顾虑吗?

最佳答案

我很确定在 Qt 中从不同的线程更新 GUI 是危险的,即使您尝试在自己的代码中锁定内容。一方面,Qt 可能在主线程上进行自己的事件处理,它不会获取您的锁来保护它可能修改的对象。 On this page在 Qt 文档中,明确提到了 QWidget 不可重入或线程安全这一事实。

我建议您将收集的数据或其处理后的版本发布回主线程。使用排队的信号/槽连接,或自定义 QEventQApplication::postEvent 来执行此操作。在 jkerian 提到的前一个问题中,它说如果你想让事件发布正常工作,你必须使用 QThread 而不是 python 的线程。

关于python - PyQT 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842558/

相关文章:

python - 将位 numpy 数组的一部分转换为基数 10 的快速方法

python - 列表比较算法 : How can it be made better?

python - 替换字符串中的 ' with\'

java - 如何为运行正则表达式的 Java 函数设置时间限制

python - 使用 keyPressEvent 捕捉输入或返回

python - Django runserver错误: _frozen_importlib. _DeadlockError:由_ModuleLock ('django.test.signals'检测到死锁)在139824587568800

c - 使用 pthread 创建时钟

python - pyaudio - "Listen"直到检测到语音然后录制到 .wav 文件

python - 使用 PyQt 显示基本形状文件

python - "Fullscreen is unavailable"在 QWebEngineView 中将 YouTube 视频嵌入为 iframe