在網上看到了好多關於python的thread的問題,關於多執行緒的爬蟲,我發現網上一些論壇的**實際上是單執行緒的,而我也是剛剛開始搞多執行緒,這是我的理解,請各位高手多多指教,前面是論壇**,後面是我自己寫的**,新手,還請指點一下,一起進步~
論壇**(自己研究了一下,大體是這樣):
#encoding:utf-8
importthreading
importurllib,urllib2
importqueue
importbs4
frombs4importbeautifulsoup
importtime
hosts=['','','']
queue=queue.queue(0);
out_queue=queue.queue(0)
classcontentthread(threading.thread):
def__init__(self,queue,out_queue):
threading.thread.__init__(self)
self.queue=queue
self.out_queue=out_queue
defrun(self):
whiletrue:
host=self.queue.get()
url=urllib.urlopen(host)
chunk=url.read()
self.out_queue.put(chunk)
self.queue.task_done()
classmatch(threading.thread):
def__init__(self,out_queue):
threading.thread.__init__(self)
self.out_queue=out_queue
defrun(self):
whiletrue:
chunk=self.out_queue.get()
soup=beautifulsoup(chunk)
printsoup.findall(['title'])
printself.name
self.out_queue.task_done()
start=time.time()
defmain():
t=contentthread(queue,out_queue)
t.setdaemon(true)
t.start()
foriinhosts:
queue.put(i)
dt=match(out_queue)
dt.setdaemon(true)
dt.start()
queue.join()
out_queue.join()
if__name__=='__main__':
main()
print'爬蟲耗時:%s秒'%(time.time()-start)
這個**在task_done()之後加上time.sleep(10)會有明顯的堵塞情況。輸出threadname也是顯示相同的執行緒名字。
這是是我寫的多執行緒爬蟲:
#encoding:utf-8
importthreading
importurllib,urllib2
importqueue
importbs4
frombs4importbeautifulsoup
importtime
queue=queue.queue(0)
hosts=['','','']
classmythread(threading.thread):
def__init__(self):
threading.thread.__init__(self)
self.queue=queue
#self.out_queue=out_queue
defrun(self):
globalqueue
host=self.queue.get()
printself.name
url=urllib.urlopen(host)
chunk=url.read()
soup=beautifulsoup(chunk)
printsoup.findall(['title'])
print'爬蟲耗時:%s秒'%(time.time()-start)
#printhost
#printqueue.qsize()
start=time.time()
defhost():
foriinhosts:
t=mythread()
t.start()
msg=str(i)
globalqueue
queue.put(str(i))
printmsg
#print"elapsedtime:%s"%(time.time()-start)
if__name__=='__main__':
host()
這個在輸出時間之後再sleep不會出現堵塞情況,輸出threadname也是顯示不同的執行緒名字
關於多執行緒的問題
void ccopydlg onbutton2 得到原始檔的位元組數 dword sz getfilesize void sourcefile.m hfile,null 為每個執行緒分配任務 dword amount sz 4 pra.count amount unsigned long tid0 ...
關於多執行緒使用的問題
我有乙個tthread類,然後類裡面,私有成員指標tidicmpclient 在建構函式中,new了乙個tidicmpclient物件出來。因為有十來個執行緒併發,然後發現,從tidicmpclient replystatus讀出的資訊,是其它執行緒的內容。感覺很奇怪,不知道tidicmpclien...
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...