每乙個應用就是乙個程序,比如我們電腦上的qq等,程序有多個執行緒組成,執行緒和執行緒之間是獨立的
python執行程序裡面本身就有乙個執行緒,這個執行緒叫主線程
多執行緒主要用threading模組就夠了,通過宣告物件,通過start啟動執行緒
備註:乙個start就是乙個執行緒
例子如下:
importthreading
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)
importrequests,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分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...