1. 執行緒執行**的封裝
通過上一小節,能夠看出,通過使用threading模組能完成多工的程式開發,為了讓每個執行緒的封裝性更完美,所以使用threading模組時,往往會定義乙個新的子類class,只要繼承threading.thread
就可以了,然後重寫run
方法
示例如下:
執行結果:#coding=utf-8
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屬性中儲存的是當前執行緒的名字
print(msg)
if __name__ == '__main__':
t = mythread()
t.start()
i'm thread-1 @ 0
i'm thread-1 @ 1
i'm thread-1 @ 2
2. 執行緒的執行順序
執行結果:(執行的結果可能不一樣,但是大體是一致的)#coding=utf-8
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)
print(msg)
def test():
for i in range(5):
t = mythread()
t.start()
if __name__ == '__main__':
test()
說明i'm thread-1 @ 0
i'm thread-2 @ 0
i'm thread-5 @ 0
i'm thread-3 @ 0
i'm thread-4 @ 0
i'm thread-3 @ 1
i'm thread-4 @ 1
i'm thread-5 @ 1
i'm thread-1 @ 1
i'm thread-2 @ 1
i'm thread-4 @ 2
i'm thread-5 @ 2
i'm thread-2 @ 2
i'm thread-1 @ 2
i'm thread-3 @ 2
從**和執行結果我們可以看出,多執行緒程式的執行順序是不確定的。當執行到sleep語句時,執行緒將被阻塞(blocked),到sleep結束後,執行緒進入就緒(runnable)狀態,等待排程。而執行緒排程將自行選擇乙個執行緒執行。上面的**中只能保證每個執行緒都執行完整個run函式,但是執行緒的啟動順序、run函式中每次迴圈的執行順序都不能確定。
每個執行緒預設有乙個名字,儘管上面的例子中沒有指定執行緒物件的name,但是python會自動為執行緒指定乙個名字。
當執行緒的run()方法結束時該執行緒完成。
無法控制線程排程程式,但可以通過別的方式來影響執行緒排程的方式。
多工 執行緒
建立函式 建立執行緒物件,並制定函式 開啟執行緒 import threading import time defwork1 1.定義函式 for i in range 5 print 正在掃地 i time.sleep 1 defmain 測試執行緒的基本使用 2.建立執行緒物件 t1 threa...
多工 執行緒
簡單地說,就是作業系統可以同時執行多個任務。實現多工有多種方式,執行緒 程序 協程。可以簡單理解為同一程序中有多個計數器,每個執行緒的執行時間不確定,而每個程序的時間片相等,執行緒是作業系統排程執行的最小單位.import threadingt1 threading.thread target fu...
多工 執行緒
什麼叫 多工 呢?簡單地說,就是作業系統可以同時執行多個任務。執行緒 1.使用threading模組 import threading defsing pass defdance pass defmain t1 threading.thread target sing t2 threading.th...