作者neil987 (R5大小姐-EX人品崩坏)
看板Python
标题[问题] 关於QThread
时间Sat Nov 25 23:33:47 2017
各位前辈好
最近在写PyQt4的Qthread遇到了一点问题
情境为 按下某个按钮时,会将一些url放入Queue1里面
接着用4个thread 从Queue1将url取出分析出该页面里面的一些文章标题url放入List
----现在做到这里分隔线----
然後从List取出文章标题url再存入另一个Queue2
等按下另一个按钮,再从Queue2从文章标题url多thread下载文章内容
thread class程式码如下:
class Worker(QtCore.QThread):
def __init__(self, threadId, name, queue, parent=None, allPageNum=None):
super().__init__(parent)
self.threadId = threadId
self.queue = queue
self.name = name
self.allPageNum = allPageNum
def run(self):
if "getArticle" in self.name:
while(not self.queue.empty()):
pageNum = self.queue.get()
articleList = article.get_page_article(self.allPageNum,pageNum)
#这段是我取得文章标题的程式,回传一个有文章标题url的List
print(articleList)
time.sleep
按钮行为部分:
threadList = []
self.pageQueue.queue.clear()
...
#将范围url放入queue
for i in range(start,end+1):
self.pageQueue.put(i)
#创造4个thread
for j in range(4):
pageThread = Worker(i, "getArticle", self.pageQueue,
allPageNum=self.allPageNum)
threadList.append(pageThread)
for thread in threadList:
thread.start()
第一个问题是
一开始会跑出
QThread: Destroyed while thread is still running
然後程式就挂掉了
第二个问题是
在做判断是否全部抓完的部分会有
while(not self.queue.empty()):
AttributeError: 'tuple' object has no attribute 'queue'
的问题
然後没办法把全部的url抓出来
求解QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.120.251.134
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1511624032.A.BB8.html
1F:→ neil987: 对了 环境是python3 11/25 23:39
2F:→ uranusjr: 给的资讯太少, 看起来是你的 thread 放在错误的 scope 11/26 00:04
3F:→ uranusjr: 至少要有你的按钮行为整个函式宣告, 而不是只有内容 11/26 00:05
按钮行为是一个抓取使用者两个输入的页数first final 变成范围
self.connect(self.sendPageButton, QtCore.SIGNAL('clicked()'),
self.parse_pages)
def parse_pages(self):
first , final #略 起始页数&终止页数
threadList = []
self.pageQueue.queue.clear()
for i in range(first,final+1):
self.pageQueue.put(i)
for j in range(4):
pageThread = Worker(i, "getArticle", self.pageQueue,
allPageNum=self.allPageNum)
threadList.append(pageThread)
for thread in threadList:
thread.start()
这是那颗按钮的行为 而article.get_page_article()回传值为一个带有许多标题字串
的List
感谢
※ 编辑: neil987 (219.68.18.225), 11/26/2017 02:51:31