1、threading模組是python裡面常用的執行緒模組,多執行緒處理任務對於提公升效率非常重要,先說一下執行緒和程序的各種區別,如圖
概括起來就是
io密集型(不用cpu)2、threading模組可以建立多個執行緒,不過由於gil鎖的存在,python在多執行緒裡面其實是快速切換,下面**是建立執行緒的簡單體驗多執行緒計算密集型(用cpu)
多程序使用執行緒和程序的目的都是為了提公升效率
(1)單程序單執行緒,主程序、主線程
(2)自定義執行緒:
主程序主線程
子執行緒
import
time
import
threading
def
f0():
pass
def
f1(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方法
該方法的具體用法是給執行緒設定紅綠燈,紅燈表示停,綠燈表示執行,如**
import
threading
import
time
def
do(event):
print
(
'start'
)
event.wait()
#紅燈,所有執行緒執行都這裡都在等待
print
(
'end'
)
event_obj
=
threading.event()
#建立乙個事件
for
i
in
range
(
10
):
#建立10個執行緒
t
=
threading.thread(target
=
do,args
=
(event_obj,))
t.start()
time.sleep(
5
)
event_obj.clear()
#讓燈變紅,預設也是紅的,阻塞所有執行緒執行
data
=
input
(
'請輸入要:'
)
if
data
=
=
'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 的形...