Python之threading多執行緒

2021-08-25 11:33:19 字數 3712 閱讀 8515

1、threading模組是python裡面常用的執行緒模組,多執行緒處理任務對於提公升效率非常重要,先說一下執行緒和程序的各種區別,如圖

概括起來就是

io密集型(不用cpu)

多執行緒計算密集型(用cpu)

多程序使用執行緒和程序的目的都是為了提公升效率

(1)單程序單執行緒,主程序、主線程

(2)自定義執行緒:

主程序主線程

子執行緒

2、threading模組可以建立多個執行緒,不過由於gil鎖的存在,python在多執行緒裡面其實是快速切換,下面**是建立執行緒的簡單體驗

importtime

importthreading

deff0():

pass

deff1(a1,a2):

time.sleep(5)

f0()

'''下面**是直接執行下去的,不會等待函式裡面設定的sleep'''

t=threading.thread(target=f1,args=(111,112))#建立執行緒

t.setdaemon(true)#設定為後台執行緒,這裡預設是false,設定為true之後則主線程不用等待子執行緒

t.start()#開啟執行緒

t=threading.thread(target=f1, args=(111,112))

t.start()

t=threading.thread(target=f1, args=(111,112))

t.start()

#預設情況下程式會等執行緒全部執行完畢才停止的,不過可以設定更改為後台執行緒,使主線程不等待子執行緒,主線程結束則全部結束

(1)join ()方法:主線程a中,建立了子執行緒b,並且在主線程a中呼叫了b.join(),那麼,主線程a會在呼叫的地方等待,直到子執行緒b完成操作後,

才可以接著往下執行,那麼在呼叫這個執行緒時可以使用被呼叫執行緒的join方法。join([timeout]) 裡面的引數時可選的,代表執行緒執行的最大時

間,即如果超過這個時間,不管這個此執行緒有沒有執行完畢都會被**,然後主線程或函式都會接著執行的,如果執行緒執行時間小於引數表示的

時間,則接著執行,不用一定要等待到引數表示的時間。

(2)setdaemon()方法。主線程a中,建立了子執行緒b,並且在主線程a中呼叫了b.setdaemon(),這個的意思是,把主線程a設定為守護執行緒,這

時候,要是主線程a執行結束了,就不管子執行緒b是否完成,一併和主線程a退出.這就是setdaemon方法的含義,這基本和join是相反的。此外,還有

個要特別注意的:必須在start() 方法呼叫之前設定,如果不設定為守護執行緒,程式會被無限掛起,只有等待了所有執行緒結束它才結束。

3、python多執行緒裡面的鎖的

在多執行緒處理任務的時候,在同時操作乙個資料的時候可能會造成髒資料,這時候就出現了鎖的概念,也就是有乙個執行緒在操作該資料的時候,就把

該資料鎖上,防止別的執行緒操作,操作完了再釋放鎖。

4、python多執行緒裡面的event方法

該方法的具體用法是給執行緒設定紅綠燈,紅燈表示停,綠燈表示執行,如**

importthreading

importtime

defdo(event):

print('start')

event.wait()#紅燈,所有執行緒執行都這裡都在等待

print('end')

event_obj=threading.event()#建立乙個事件

foriinrange(10):#建立10個執行緒

t=threading.thread(target=do,args=(event_obj,))

t.start()

time.sleep(5)

event_obj.clear()#讓燈變紅,預設也是紅的,阻塞所有執行緒執行

data=input('請輸入要:')

ifdata=='true':

event_obj.set()#變綠燈

結果如圖

python中的執行緒使用 threading模組

最近又用到了python中的多執行緒程式設計,前段時間使用並學習過,但是由於長時間不用,慢慢就忘記怎麼用了,畢竟對執行緒的使用還不是很熟練,現在總結一下,記錄下來,加深一下學習的印象。python中關於執行緒,主要有兩個模組thread和threading,其中thread的模組已不建議使用,因為t...

11 2 Python多執行緒threading

分程序設定 工具 threading包 1 先寫需要分程序執行的函式或者類 defmaigic pass 2 例項化threading,得到新的程序 threadone threading.thread target maigic 此時還可以接受arg引數import threading impor...

Python3併發程式設計之threading模組

建立執行緒物件 threading.thread 引數 引數 描述group none 該類中的待擴充套件引數。target none 目標函式,即被開闢執行緒的執行任務。預設值為none,表示什麼都不執行。name none 該執行緒的名稱。在預設情況下,執行緒的唯一名稱以 thread n 的形...