看到网上的资料,一般当子函数逻辑是无限循环的时候, 会以 QtCore.QThread 的方式来执行,以实现更新 GUI,且 GUI 不卡。
我的有一个多线程爬虫的脚本,想要给他实现一个 GUI 界面出来。
现在实现的是 一个类继承 QtCore.QThread,这个类中分配线程数、实现 queue,然后发给 spider 类(该类继承 threading.Thread )
这样处理后,GUI 倒是不卡。但是效率明显下来了,给人的感觉就是实际上是单线程在运行(或许真是如此)。
求问该如何处理?
1
coderluan 2018-09-27 17:33:08 +08:00
没太看明白楼主为啥这么做,直接用_thread 启动 GUI 线程就不会卡啊,会不会是数据刷新太快,GUI 每条都要显示然后阻塞了爬虫,这种修改下做个数据池缓冲一下就好了,或者干脆修改显示方式也行。
|
2
kingmo888 OP @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。 |