1、threading模組
1.1.執行緒簡述
執行緒(輕量級程式)與程式類似,不過它們是在同一個程式下執行的,並共享相同的上下文。可以將它們認為是在一個主程式或”主執行緒”中並行執行的一些”迷你程式”。
執行緒包括開始、執行順序和結束三部分。它有一個指令指標,用於記錄執行的上下文。它其他執行緒執行時,它可以被搶佔(中斷)和臨時掛起(睡眠/加鎖)—這種做法叫做讓步(yielding)。
1.2.使用threading模組來建立多執行緒
使用Thread類,可以有很多方法來建立執行緒,其中常用的有:
- 建立Thread的示例,傳給它一個函式;
- 派生Thread的子類,重新run方法,並建立子類的例項。
示例1:建立Thread的例項,傳給它一個函式
from threading import Thread
import time
def test():
print("---hello-world---")
time.sleep(1)
for i in range(5):
#建立執行緒,執行緒執行的任務是target指定的函式,如果函式需要傳入引數,則可以指定args=(),或者kwargs={}
t = Thread(target=test)
t.start()
執行結果:
---hello-world---
---hello-world---
---hello-world---
---hello-world---
---hello-world---
示例2:使用Thread子類建立執行緒
2、thread注意點
3、多執行緒共享全域性變數
3.1.執行緒關於全域性變數注意點
一個程式中的各個執行緒與主執行緒共享同一片資料空間。因此與程式相比,執行緒之間的資訊共享和通訊更加容易。在一個程式中,執行緒的執行是:每個執行緒執行一小會,然後讓步給其他執行緒(再次排隊等待更多的CPU時間)。在整個程式的執行過程中,每個執行緒執行它自己特定的任務,在必要時和其他執行緒進行通訊。
當然,這種共享是有風險的。如果兩個或多個執行緒訪問同一片資料,由於資料的訪問順序不同可能導致結果不一致。這種情況叫競態條件。辛運的是,大多數執行緒庫都有一些同步源語,以允許執行緒管理器控制執行和訪問。