前言:在前面的博文裡,我介紹了實現python多工的一種方式——多程序,那麼本博文將介紹另一種方式——多執行緒。
1.2 主線程會等待所有的子執行緒結束後才結束
1.3 檢視執行緒數量
二、多執行緒中的注意點
三、多執行緒共享全域性變數
python的thread模組是比較底層的模組,python的threading
模組是對thread做了一些包裝的,可以更加方便的被使用。
1.1.1 單執行緒執行
import time
defsaysorry()
:print
("我在學python,你呢?"
1.1.2 多執行緒執行
import threading
import time
defsaysorry()
:print
("我在學python,你呢?"
) time.sleep(1)
if __name__ ==
"__main__"
:for i in
range(3
):t = threading.thread(target=saysorry)
# 啟動執行緒,即讓執行緒開始執行
說明:可以明顯看出使用了多執行緒併發的操作,花費時間要短很多。
當呼叫start()
時,才會真正的建立執行緒,並且開始執行。
import threading
from time import sleep, ctime
defsing()
:for i in
range(3
):print
("正在唱歌...%d"
% i)
sleep(1)
defdance()
:for i in
range(3
):print
("正在跳舞...%d"
% i)
sleep(1)
if __name__ ==
'__main__'
:print
('---開始---:%s'
% ctime())
t1 = threading.thread(target=sing)
t2 = threading.thread(target=dance)
t1.start(
) t2.start(
)# sleep(5) # 開啟此行**,再次執行程式,對比區別。
print
('---結束---:%s'
("正在唱歌...%d"
% i)
sleep(1)
defdance()
:for i in
range(3
):print
("正在跳舞...%d"
% i)
sleep(1)
if __name__ ==
'__main__'
:print
('---開始---:%s'
% ctime())
t1 = threading.thread(target=sing)
t2 = threading.thread(target=dance)
t1.start(
) t2.start(
)while
true
: length =
len(threading.
enumerate()
)print
('當前執行的執行緒數為:%d'
通過上一部分,我們能夠看出:通過使用threading
模組能完成多工的程式開發,為了讓每個執行緒的封裝性更完美,所以使用threading
模組時,往往會定義乙個新的子類class,只要繼承threading.thread
就可以了,然後重寫run
方法,示例如下:
import threading
import time
class
mythread
(threading.thread)
:def
run(self)
:for i in
range(3
):time.sleep(1)
msg =
"i'm "
+ self.name +
' @ '
+str
(i)# name屬性中儲存的是當前執行緒的名字
說明:
說明:每個執行緒預設有乙個名字,儘管上面的例子中沒有指定執行緒物件的name
,但是python會自動為執行緒指定乙個名字。
當執行緒的run()
方法結束時,該執行緒完成。
我們無法控制線程排程程式,但可以通過別的方式來影響執行緒排程的方式。
python中多執行緒 Python之多執行緒
python之多執行緒 一 概念 1 多工可以由多程序完成,也可以由乙個程序內的多執行緒完成。程序是由若干的執行緒組成,乙個程序至少有乙個程序。執行緒是作業系統直接支援的執行單元,天賜高階預壓通常都是內建多執行緒的支援,python的執行緒是真正的posix thread而不是模擬出來的執行緒。2 ...
python中的多執行緒
python中的多執行緒是假的多執行緒!為什麼這麼說,我們先明確乙個概念,全域性直譯器鎖 gil global interpreter lock python 的執行由python虛擬機器 直譯器 來控制,同時只有乙個執行緒在執行 對python虛擬機器的訪問由全域性直譯器鎖 gil 來控制,正是這...
python中的多執行緒
當python程式執行時會預設建立乙個主線程,除了主線程之外我們還可以建立別的執行緒,可以使用threading引入 import threading import time defthinking for i in range 3 threading.current thread 檢視當前正在執行...