我正在尝试使用Qt在后台运行长时间的阻塞呼叫。 (确切地说,是pyattyscomm.AttysScan
的scan
方法。)我认为我应该使用QThread
,并提出以下建议:
import pyattyscomm
from PySide2.QtCore import QThread, Signal
class DataCollectionThread(QThread):
attys_ready = Signal()
def __init__(self, parent=None):
super().__init__(parent)
self.scanner = pyattyscomm.AttysScan()
def run(self):
self.scanner.scan() # this is a long, blocking call
self.attys_ready.emit()
但是,当我start
线程(来自小部件中的某些逻辑)时,GUI挂起,直到scan
方法完成(即一段时间)。
我用scan
替换了对time.sleep(10)
的调用,这很奇怪,它没有冻结UI。我需要/可以更改一些内容来避免scan
阻塞吗?
答案 0 :(得分:0)
借助Grzegorz Bokota的帮助,我了解到C ++库没有释放GIL(与其他C / C ++绑定(如OpenCV和NumPy)不同)。
要解决此问题,我在'-threads'
和submitted the patch to upstream.的swig_opts
数组中添加了setup.py