PyQt 如何终止线程并为具有不同数据集的同一线程使用相同的变量

问题描述 投票:0回答:1

我正在创建一个管理数据的应用程序。一个函数需要一个线程在后台收集数据。为此,我在主类中创建了一个名为

bookGrabber
的变量。在某个时刻,用户启动收集数据的函数,该函数将
BookGrabber
类分配给变量
self.bookGrabber

BookGrabber 类是一种元数据检查,它利用列表(数据)来检查网页上条目中的字段,并将包含数据的数据类插入数据库中。它是一个继承自QThread的类。

class Ui(Ui_Mainwindow):
    def __init__(self, MainWindow, username) -> None:
        [...]
        self.bookGrabber = None
    def btn_add_medium(self):
        [...]
        self.bookGrabber = BookGrabber(mode = mode, prof_id = prof_id, app_id = app_id, data = data)
        self.bookGrabber.finished.connect(self.bookGrabber.deleteLater)
        self.bookGrabber.finished.connect(self.hide_progress_label)
        self.bookGrabber.finished.connect(self.update_app_media_list)
        self.bookGrabber.updateSignal.connect(self.update_progress_label)

        self.bookGrabber.start()
        while self.bookGrabber.isRunning():
            print("waiting for thread to finish")
            QtWidgets.QApplication.processEvents()

我的代码有问题 - 第二次运行时,返回的数据包含错误。错误是“书籍不存在”,是由当前数据集中的 app_id 引起的,即使我将新的 app_id 传递到 BookGrabber,也会使用旧的 app_id。

这引出了我的问题:

如何有效地杀死 python/pyqt 中的线程以允许多个线程使用同一变量?

我尝试在线程结束后使用

del self.bookGrabber
,在初始化线程之前和之后将 self.bookGrabber 设置为
None

最好的方法是什么?

如果还有什么需要,我可以更新问题。

感谢任何帮助,提前致谢。

python-3.x python-multithreading pyqt6
1个回答
0
投票

该问题是由于在线程中使用具有全局列表而不是本地列表的类引起的

© www.soinside.com 2019 - 2024. All rights reserved.