Python建立執行緒

2022-08-19 18:21:15 字數 2335 閱讀 9148

python 提供了 _thread 和 threading 兩個模組來支援多執行緒,其中 _thread 提供低階別的、原始的執行緒支援,以及乙個簡單的鎖,正如它的名字所暗示的,一般程式設計不建議使用 thread 模組;而 threading 模組則提供了功能豐富的多執行緒支援。

python 主要通過兩種方式來建立執行緒:

使用 threading 模組的 thread 類的構造器建立執行緒。

繼承 threading 模組的 thread 類建立執行緒類。

呼叫 thread 類的構造器建立執行緒

呼叫 thread 類的構造器建立執行緒很簡單,直接呼叫 threading.thread 類的如下構造器建立執行緒:

__init__(self, group=none, target=none, name=none, args=(), kwargs=none, *,daemon=none)

上面的構造器涉及如下幾個引數:

group:指定該執行緒所屬的執行緒組。目前該引數還未實現,因此它只能設為 none。

target:指定該執行緒要排程的目標方法。

args:指定乙個元組,以位置引數的形式為 target 指定的函式傳入引數。元組的第乙個元素傳給 target 函式的第乙個引數,元組的第二個元素傳給 target 函式的第二個引數……依此類推。

kwargs:指定乙個字典,以關鍵字引數的形式為 target 指定的函式傳入引數。

daemon:指定所構建的執行緒是否為後代執行緒。

通過 thread 類的構造器建立井啟動多執行緒的步驟如下:

呼叫 thread 類的構造器建立執行緒物件。在建立執行緒物件時,target 引數指定的函式將作為執行緒執行體。

呼叫執行緒物件的 start() 方法啟動該執行緒。

下面程式示範了通過 thread 類的構造器來建立執行緒物件:

import threading

# 定義乙個普通的action函式,該函式準備作為執行緒執行體

def action(max):

for i in range(max):

# 呼叫threading模組current_thread()函式獲取當前執行緒

# 執行緒物件的getname()方法獲取當前執行緒的名字

print(threading.current_thread().getname() + " " + str(i))

# 下面是主程式(也就是主線程的執行體)

for i in range(100):

# 呼叫threading模組current_thread()函式獲取當前執行緒

print(threading.current_thread().getname() + " " + str(i))

if i == 20:

# 建立並啟動第乙個執行緒

t1 =threading.thread(target=action,args=(100,))

t1.start()

# 建立並啟動第二個執行緒

t2 =threading.thread(target=action,args=(100,))

t2.start()

print('主線程執行完成!')

上面程式中的主程式包含乙個迴圈,當迴圈變數 i 等於 20 時建立並啟動兩個新執行緒:

建立了乙個 thread 物件,該執行緒的 target 為 action,這意味著它會將 action 函式作為執行緒執行體。接下來程式呼叫 start() 方法來啟動t1執行緒。

再次建立了乙個執行緒,其建立和啟動方式與第乙個執行緒完全相同。

執行上面程式,將會看到如圖所示的介面。

雖然上面程式只顯式建立並啟動了兩個執行緒,但實際上程式有三個執行緒,即程式顯式建立的兩個子執行緒和主線程。前面己經提到,當 python 程式開始執行後,程式至少會建立乙個主線程,主線程的執行緒執行體就是程式中的主程式(沒有放在任何函式中的**)。

從上圖可以看出,此時程式中共包含三個執行緒,這三個執行緒的執行沒有先後順序,它們以併發方式執行:thread-1 執行一段時間,然後可能 thread-2 或 mainthread 獲得 cpu 執行一段時間,接下來又換其他執行緒執行,這就是典型的執行緒併發執行,cpu 以快速輪換的方式在多個執行緒之間切換,從而給使用者一種錯覺,即多個執行緒似乎同時在執行。

通過上面介紹不難看出多執行緒的意義,如果不使用多執行緒,主程式直接呼叫兩次 action() 函式,那麼程式必須等第一次呼叫的 action() 函式執行完成,才會執行第二次呼叫的 action() 函式;必須等第二次呼叫的 action() 函式執行完成,才會繼續向下執行主程式。

本文**於

Python 執行緒(一) 建立執行緒

python中有兩個執行緒模組,分別是thread和threading,threading是thread的公升級版。threading的功能更強大。建立執行緒有3種方法 1 thread模組的start new thread函式 2 繼承自threading.thread模組 3 用theading...

Python執行緒的建立

python執行緒開啟的2中方式 一種是傳參 另一種寫乙個類繼承thread類 usr bin python coding utf8 開啟from threading import thread import os def work name print s say hello name if na...

python 建立多執行緒

import time import threading defsing for i in range 0,5 print 正在唱歌 time.sleep 1 defdance for i in range 0,5 print 正在跳舞 time.sleep 1 defmain create a t...