對python 多執行緒thread的認識

2021-10-25 17:39:45 字數 2494 閱讀 4807

對python 多執行緒thread的認識## 標題

class

doutulaspider

(threading.thread)

: headers =

def__init__

(self,

*args,

**kwargs)

: self.page_que = queue(10)

self.img_que = queue(20)

defrun

(self)

:while

true

:if self.img_que.empty(

)and self.page_que.empty():

break

url, file_name = self.img_que.get(

)print

("-------"

)print

(url,file_name)

request.urlretrieve(url,

"doutula/thread/{}"

.format

(file_name)

)def

geturl

(self)

: url =

""url_list =

(url.

format

(i)for i in

range(5

))for u in url_list:

self.page_que.put(u)

defparseurl

(self)

:while

true

: url = self.page_que.get(

)if self.page_que.empty():

break

print

(url)

content = requests.get(url, headers=self.headers)

text = content.text

self.getdata(text)

defgetdata

(self,text)

: html = etree.html(text)

images = html.xpath(

"//div[@class='page-content text-center']//img[@class!='gif']"

)# print(images)

for img in images:

# if img.split(".")[-1] != "gif":

# print(etree.tostring(img).decode())

img_url = img.get(

"data-original"

) alt = img.get(

"alt"

) backprefix = os.path.splitext(img_url)[-

1]# 安字尾名切割 得到元組

# backprefix = img_url.split(".")[-1]

file_name = alt + backprefix

ifnot alt or alt ==

"?":

file_name = os.path.split(img_url)[-

1]# request.urlretrieve(img_url, "doutula/{}".format(file_name))

print

(file_name)

self.img_que.put(

(img_url, file_nam

defmain()

: p = doutulaspider(

)for i in

range(2

):t = threading.thread(target=p.geturl)

t.start(

)for i in

range(5

):t = threading.thread(target=p.parseurl)

t.start(

)for i in

range(4

):t = threading.thread(target=p.run)

t.start(

)if __name__ ==

'__main__'

: main(

)

如上圖**所示,多程序爬取表情包。開執行緒時針對某個功能的函式進行的,比如上面幾個函式,parseurl 和 run,都是有阻塞的,開執行緒速度能明顯提高。一般爬蟲用多執行緒,或者使用thread模組,都會用上queue,用佇列的目的,通俗理解就是去重,使得有序進行。否在,會出現爬取過的,其他執行緒友爬了。

python多執行緒 python多執行緒

通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...

python多執行緒詳解 Python多執行緒詳解

前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...

python程式多執行緒 PYTHON多執行緒

在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...