确定Python Qt程序在macOS上不可见时暂停的原因



我有一个Qt Python程序,它通过串行端口记录数据。我希望这个程序在运行时始终记录数据,即使应用程序不可见。目前,当应用程序不可见时,日志记录将在大约45秒后暂停。一旦应用程序窗口再次可见,日志记录将恢复。代码的日志记录部分位于使用QRunnable和QThreadPool的第二个线程中。

我试着寻找原因(或解决方案(,但运气不太好。我的部分问题是,我不确定这个问题是否与操作系统、IDE、语言等有关。

高级细节:

  • 操作系统:macOS 12.4
  • IDE:vscode
  • 语言/框架:Python3/Qt(pyside6(

有人知道为什么这个应用程序/线程会暂停吗?是否可以让应用程序在数据不可见的情况下继续记录数据?我希望,一旦我有了正确的方向,我就能解决这个问题。

UPDATE示例代码

class LogSignals(QObject):
result = Signal(dict)
class LogWorker(QRunnable):
def __init__():
super().__init__()
self.signals = LogSignals()
def run(self):
try:
for i in range(N_LOG_SAMPLES):
result = self.getSerialData()
self.signals.result.emit(result)
except:
traceback.print_exc()
exctype, value = sys.exc_info()[:2]
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.threadpool = QThreadPool()
def startLog(self):
log_worker = LogWorker()
log_worker.signals.result.connect(self.updateLogData)
self.threadpool.start(log_worker)
@Slot()
def updateLogData(self, result: dict):
#save data
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

您需要检查应用程序是否处于活动状态,并相应地启动或删除日志记录。你可以使用

QWidget*Q应用程序::activeWindow((

如果您的应用程序没有活动窗口,这将返回一个nullptr。所以,你会写这样的东西:

if (application->activeWindow())
; // Start / Keep logging
else
; // Stop logging

最新更新