Python系統程式設計之執行緒

mori_d發表於2019-02-16

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時間)。在整個程式的執行過程中,每個執行緒執行它自己特定的任務,在必要時和其他執行緒進行通訊。

當然,這種共享是有風險的。如果兩個或多個執行緒訪問同一片資料,由於資料的訪問順序不同可能導致結果不一致。這種情況叫競態條件。辛運的是,大多數執行緒庫都有一些同步源語,以允許執行緒管理器控制執行和訪問。

4、同步和互斥鎖

5、

標題文字

標題文字

相關文章