高级Python调度程序块调度程序不能很好地使用QtCore.信号在PyQ中

2024-05-08 03:42:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现了一些我不太理解的有趣的行为,想知道是否有人知道发生了什么。在

我正在用PyQt4开发一个程序,我要求RS485接口接收到的数据每秒更新一次

为了准确地实现这一点,我使用高级Python调度器(APS)的BlockingScheduler来每秒调度一个任务。在

我遇到的问题是,当使用BlockingScheduler时,我从主线程发出的任何信号都没有收到,即使我使用QtCore.QCoreApplication.processEvents()。在

我不太明白这一点,因为如果我在工作线程中有一个阻塞循环,例如:

while(True):
    print('This loop never ends')
    QtCore.QCoreApplication.processEvents()

来自另一个线程的所有信号都将在print语句生成后被处理。但是看起来BlockingScheduler并没有表现出与此相同的行为。在

我尝试过使用BackgroundScheduler,但这个实现的问题是BackgroundScheduler似乎与调用它的线程有不同的事件循环。这导致了与硬件的通信冲突,因为有两个执行循环在争夺一个串行总线。在

我的代码看起来像这样

^{pr2}$

所以我的问题是:

1)如何使BlockingScheduler看到外部信号

2)如何让信号等待BackgroundScheduler安排的任务完成?在

3)是否有更好的方法来安排每秒钟的任务,而不让这些都成为问题?在


Tags: 数据程序信号调度线程主线printpyqt4