求助个 pyqt 小白问题/疑问,如何 GUI 不卡的情况下实现多线程?

2018-09-27 17:14:26 +08:00
 kingmo888

看到网上的资料,一般当子函数逻辑是无限循环的时候, 会以 QtCore.QThread 的方式来执行,以实现更新 GUI,且 GUI 不卡。

我的有一个多线程爬虫的脚本,想要给他实现一个 GUI 界面出来。

现在实现的是 一个类继承 QtCore.QThread,这个类中分配线程数、实现 queue,然后发给 spider 类(该类继承 threading.Thread )

这样处理后,GUI 倒是不卡。但是效率明显下来了,给人的感觉就是实际上是单线程在运行(或许真是如此)。

求问该如何处理?

920 次点击
所在节点    问与答
2 条回复
coderluan
2018-09-27 17:33:08 +08:00
没太看明白楼主为啥这么做,直接用_thread 启动 GUI 线程就不会卡啊,会不会是数据刷新太快,GUI 每条都要显示然后阻塞了爬虫,这种修改下做个数据池缓冲一下就好了,或者干脆修改显示方式也行。
kingmo888
2018-09-27 17:46:13 +08:00
@coderluan
比如不用 GUI 前的结构是:

spider(threading.Thread)

Down:

def __init__(threadnum, needDeal):

queue()

for i in range(len(needDeal):

queue.put()

for i in range(threadnum):

t = spider(......)

t.setDaemon(True)

t.start()

queue.join()



后来加个 GUI 上去,
就把 Down 改为 Down(QThread), 其中 init 的代码转移到了 run()中。

然后在 GUI 代码中调用 Down。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493248

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX