gpt4 book ai didi

Python 线程模块 - GUI 仍然卡住

转载 作者:行者123 更新时间:2023-12-03 13:08:04 24 4
gpt4 key购买 nike

我用 GUI 构建了一个 twitter 爬虫,它从任何给定的 Twitter 帐户中获取最新的 20 条推文,并将它们保存到一个 csv 文件中。

爬虫应每 x 分钟 (timeIntervall) 重复爬取 y 次 (times)。当爬虫当前很忙时,GUI 会卡住,所以我尝试使用线程来解决这个问题:

app = QtWidgets.QApplication(sys.argv)


class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("Twitter Crawler")
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.onPushButtonClick)

def onPushButtonClick(self):

def working(self):
url = self.ui.urlInput.text()
timeIntervall = self.ui.timeIntervall.text()
seconds = timeIntervall.split(":")
seconds = int(seconds[0]) * 60 * 60 + int(seconds[1]) * 60
times = self.ui.crawlcount.value()
fetcher = ArticleFetcher(url)
print(times)
firstFetch = True

for count in range(0, times):
if firstFetch:
fetcher.fetch()
firstFetch = False
else:
time.sleep(seconds)
fetcher.fetch()

worker = threading.Thread(target=working, args=(self,))
worker.start()
worker.join()

window = MainWindow()
window.show()
sys.exit(app.exec())

输入 timeIntervall、times 和 pushButton 后,会启动一个工作线程来处理爬取。应用程序正在运行,但 GUI 仍然卡住。

我怀疑我需要另一个用于 GUI 的线程并尝试了以下操作:
def gui():
window = MainWindow()
window.show()
sys.exit(app.exec())

rungui = threading.Thread(target=gui)
rungui.start()
rungui.join()

现在 GUI 只打开非常短暂,然后立即再次关闭。

任何建议如何解决这个问题?还是不使用 PyQt 线程模块可能很愚蠢?

最佳答案

线程的join()方法等待线程完成。
当你启动你的工作线程时,让它自己运行。如果您需要显示它的进度,请使用 Queue 并将消息从工作线程发送到主线程(在某些计时器循环中使用 get_nowait() 以查看工作线程是否发送了重要的东西)。

关于Python 线程模块 - GUI 仍然卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51799821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com