[英]PySide2 QThread is freezing the UI
我正在嘗試使用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
方法完成(即一段時間)。
我用time.sleep(10)
代替了scan
的time.sleep(10)
,奇怪的是它沒有凍結UI。 我是否需要/可以更改一些內容以避免scan
阻塞?
多虧了Grzegorz Bokota的幫助,我才知道C ++庫沒有發布GIL(與其他C / C ++綁定(如OpenCV和NumPy)不同)。
為了解決這個問題,我在setup.py
的swig_opts
數組中添加了'-threads'
, 並將補丁提交給上游。
該修補程序作為pyattyscomm的1.3.3.2版發布。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.