簡體   English   中英

PySide2 QThread凍結了UI

[英]PySide2 QThread is freezing the UI

我正在嘗試使用Qt在后台運行長時間的阻塞調用。 (確切地說,是pyattyscomm.AttysScanscan方法。)我認為我應該使用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)代替了scantime.sleep(10) ,奇怪的是它沒有凍結UI。 我是否需要/可以更改一些內容以避免scan阻塞?

多虧了Grzegorz Bokota的幫助,我才知道C ++庫沒有發布GIL(與其他C / C ++綁定(如OpenCV和NumPy)不同)。

為了解決這個問題,我在setup.pyswig_opts數組中添加了'-threads'並將補丁提交給上游。

該修補程序作為pyattyscomm的1.3.3.2版發布

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM