python 多執行緒

2022-07-19 07:24:10 字數 2385 閱讀 8710

每乙個應用就是乙個程序,比如我們電腦上的qq等,程序有多個執行緒組成,執行緒和執行緒之間是獨立的

python執行程序裡面本身就有乙個執行緒,這個執行緒叫主線程

多執行緒主要用threading模組就夠了,通過宣告物件,通過start啟動執行緒

備註:乙個start就是乙個執行緒

例子如下:

import

threading

import

time

deflajifenlei():

time.sleep(2)

print(threading.current_thread().name+'

haha haha

') #

列印執行緒名稱及字串

#非多執行緒方式執行,執行時間為20秒多一些

start_time=time.time()

for i in range(10):

lajifenlei()

print(time.time()-start_time)

#多執行緒統計時間卻是零點幾,究其原因是由於主線程沒有等子執行緒執行結束導致,即每個py檔案執行都有乙個主線程

#我們宣告的是子執行緒

s_time=time.time()

for i in range(10):

th=threading.thread(target=lajifenlei) #

宣告執行緒,注意寫方法名,不需要帶括號

th.start() #

啟動執行緒

print(time.time()-s_time)

#第一種方式等待子執行緒

s_time2=time.time()

threads=

for i in range(10):

th2=threading.thread(target=lajifenlei) #

宣告執行緒,注意寫方法名,不需要帶括號

th2.start() #

啟動執行緒

把每個執行緒物件加入list

for t in

threads:

t.join()

#等待子執行緒

print(time.time()-s_time2)

#第二種方法,主線程等待子執行緒

s_time3=time.time()

for j in range(10):

th3=threading.thread(target=lajifenlei) #

宣告執行緒,注意寫方法名,不需要帶括號

th3.start() #

啟動執行緒

while threading.active_count()!=1: #

當活躍的執行緒僅剩1的時候,結束等待,說明所有的子執行緒均已執行完成,只剩最後乙個執行緒在執行

pass

print(time.time()-s_time3)

import

requests,threading

import

faker

f=faker.faker(locale="

zh-cn")

defdown_load_file(url):

r=requests.get(url) #

get請求

m=f.name() #

隨機生成檔案名字

二進位制寫入檔案,儲存為jpg格式

fw.write(r.content)

url_list=[

'','',

'']for url in

url_list:

th=threading.thread(target=down_load_file,args=(url,))#

宣告執行緒且執行的方法帶引數,引數後面的逗號不可省略

th.start() #

啟動執行緒

while threading.activecount()!=1: #

等待子執行緒

pass

備註:因為python的執行緒雖然是真正的執行緒,但直譯器執行**時,有乙個gil鎖:global interpreter lock,任何python執行緒執行前,必須先獲得gil鎖,然後,每執行100條位元組碼,直譯器就自動釋放gil鎖,讓別的執行緒有機會執行。這個gil全域性鎖實際上把所有執行緒的執行**都給上了鎖,所以,多執行緒在python中只能交替執行,即使100個執行緒跑在100核cpu上,也只能用到1個核

不過,也不用過於擔心,python雖然不能利用多執行緒實現多核任務,但可以通過多程序實現多核任務。多個python程序有各自獨立的gil鎖,互不影響。

結論:多執行緒用在 io 密集,多程序用在 cpu 密集

python多執行緒 python多執行緒

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

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

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

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

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