哈嘍各位小夥伴,很快啊,小澤馬上就又更新了,速度簡直不要太快!
上回咱們不是說了怎麼開多執行緒嘛,那同樣的,還有乙個問題:
公司已經下班了,但是員工還在努力工作。
我們先來建立兩個員工:
# 匯入執行緒模組
import threading
# 匯入休眠模組
from time import sleep
# 員工a
deffunca
(a):
for i in
range(10
):print
('為工作狂!'
.format
(a))
sleep(
0.3)
# 員工b
deffuncb
(a):
for i in
range(20
):print
('也不能阻止我工作!'
.format
(a))
sleep(
0.3)
這兩個員工呢,第乙個是每隔0.3秒會工作一次,一共工作10次,也就是要3秒才可以下班。
第二個是每隔0.3秒工作一次,但是要工作20次!也就是要6秒才可以下班。
if __name__ ==
'__main__'
:# 建立執行緒物件
thread_a = threading.thread(target=funca, args=
('小明',)
) thread_b = threading.thread(target=funcb, kwargs=
)# 啟動執行緒
thread_a.start(
) thread_b.start(
) sleep(2)
print
('下班了下班了,大家快走鴨!'
)
可以看到,我們建立了兩個執行緒,分別對應兩個員工,因為python讀**是從上往下讀嘛,所以只要這兩個執行緒一啟動,就會開始計時,等到2秒的時候,就會下班啦~
也就是程式按理來說應該就要結束了,畢竟下面沒有**了嘛~
看看效果:
可以看到,哪怕是公司已經說了要下班了,但是兩位員工還是非常勤奮努力的在工作哈,非常棒!
但是呢,我們想要的是公司一下班,員工立馬滾蛋~
這個時候就要用到守護執行緒了!!!
沒錯!!!!
跟程序是一毛一樣的!!!!!
那咋整啊,看我操作唄:
# # 建立執行緒物件
# thread_a = threading.thread(target=funca,args=('小明',))
# thread_b = threading.thread(target=funcb,kwargs=)
# 建立執行緒物件,並且守護主線程
thread_a = threading.thread(target=funca, args=
('小明',)
, daemon=
true
) thread_b = threading.thread(target=funcb, kwargs=
, daemon=
true
)
我們只需要在建立執行緒物件裡面傳乙個daemon=true就好啦!
這樣我們再來跑一次康康:
舒服了~
這樣就能做到,只要我們的主線程一關閉,主線程下面的子執行緒就全部跟著關閉,而不是等子執行緒都執行完再關閉!
那麼,還有乙個問題哈,就是如果我們要一次性啟動一萬個執行緒,那不是得寫一萬行?
所以這當然不行啊!
那就得教各位怎麼快速的批量啟動執行緒:
if __name__ ==
'__main__'
:# 迴圈啟動10次執行緒,也就是開10個執行緒
for i in
range(10
):thread = threading.thread(target=funca,args=
('小明',)
) thread.start(
)
是不是瞬間就頓悟了!
如果你還沒有悟到,沒關係,知道是這樣用的,就ok了~
畢竟牽扯到的都是基礎啦…
多執行緒的那點兒事(之讀寫鎖)
在編寫多執行緒的時候,有一種情況是十分常見的。那就是,有些公共資料修改的機會比較少。相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢的操作,中間耗時很長。給這種 段加鎖,會極大地降低我們程式的效率。那麼有沒有一種方法,可以專門處理這種多讀少寫的情況呢?有,那就是讀寫鎖。1 ...
多執行緒的那點兒事(之讀寫鎖)
在編寫多執行緒的時候,有一種情況是十分常見的。那就是,有些公共資料修改的機會比較少。相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢的操作,中間耗時很長。給這種 段加鎖,會極大地降低我們程式的效率。那麼有沒有一種方法,可以專門處理這種多讀少寫的情況呢?有,那就是讀寫鎖。1 ...
多執行緒的那點兒事(之讀寫鎖)
在編寫多執行緒的時候,有一種情況是十分常見的。那就是,有些公共資料修改的機會比較少。相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢的操作,中間耗時很長。給這種 段加鎖,會極大地降低我們程式的效率。那麼有沒有一種方法,可以專門處理這種多讀少寫的情況呢?有,那就是讀寫鎖。1 ...