關於python的多執行緒問題

2021-08-27 12:15:04 字數 2586 閱讀 3024

在網上看到了好多關於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,如果是多程序則去掉...