python多執行緒之 thread

2022-04-01 19:00:04 字數 3391 閱讀 7888

多執行緒類似於同時執行多個不同程式,多執行緒執行有如下優點:

執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有乙個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

每個執行緒都有他自己的一組cpu暫存器,稱為執行緒的上下文,該上下文反映了執行緒上次執行該執行緒的cpu暫存器的狀態。

指令指標和堆疊指標暫存器是執行緒上下文中兩個最重要的暫存器,執行緒總是在程序得到上下文中執行的,這些位址都用於標誌擁有執行緒的程序位址空間中的記憶體。

執行緒可以分為:

python3 執行緒中常用的兩個模組為:

thread 模組已被廢棄。使用者可以使用 threading 模組代替。所以,在 python3 中不能再使用"thread" 模組。為了相容性,python3 將 thread 重新命名為 "_thread"。

python中使用執行緒有兩種方式:函式或者用類來包裝執行緒物件。

函式式:呼叫 _thread 模組中的start_new_thread()函式來產生新執行緒。語法如下:

_thread.start_new_thread (function,args[,kwargs])

引數說明:

import _thread

from

time import sleep

import

datetime

def date_time_str():

return

datetime.datetime.now().strftime('

%y-%m-%d %h:%m:%s')

def loop_one():

print('

++++執行緒一開始於:

',date_time_str())

print('

++++執行緒一休眠4秒')

sleep(4)

print('

++++執行緒一休眠結束,結束於:

',date_time_str())

def loop_two():

print('

++++執行緒二開始於:

',date_time_str())

print('

++++執行緒二休眠2秒')

sleep(2)

print('

++++執行緒二休眠結束,結束於:

',date_time_str())

def main():

print('

',date_time_str())

_thread.start_new_thread(loop_one,())

_thread.start_new_thread(loop_two,())

sleep(6)

print('

',date_time_str())

if __name__==

'__main__':

main()

執行結果:

[

python@master thread

]$ python3 thread.py

--++++執行緒一開始於: 2018-11

-0819:07:54

++++

執行緒一休眠4秒

++++執行緒二開始於: 2018-11

-0819:07:54

++++

執行緒二休眠2秒

++++執行緒二休眠結束,結束於: 2018-11

-0819:07:56

++++執行緒一休眠結束,結束於: 2018-11

-0819:07:58

--

sleep(6) 是讓主線程停下來,主線程一旦執行結束,就關閉執行著的其他兩個執行緒,這可能造成主線程過早或者過晚退出,這時就要用執行緒鎖,主線程可認在兩個子程序都退出後立即退出。**如下:

import _thread

from

time import sleep

import

datetime

loops=[

4,2]

def date_time_str():

return

datetime.datetime.now().strftime('

%y-%m-%d %h:%m:%s')

def loop(n_loop,n_sec,lock):

print('

執行緒(',n_loop,'

) 開始執行:

',date_time_str(),'

,先休眠(

',n_sec,')秒'

) sleep(n_sec)

print('

執行緒(',n_loop,'

)休眠結束,結束於:

',date_time_str())

lock.release()

def main():

print('

---所有執行緒開始執行...')

locks=

n_loops

=range(len

(loops))

for i in

n_loops:

lock

=_thread.allocate_lock()

lock.acquire()

for i in

n_loops:

_thread.start_new_thread(loop,(i,loops[i

],locks[i]

))

for i in

n_loops:

while locks[i]

.locked():

pass

print('

---所有執行緒執行結束:

',date_time_str())

if __name__==

'__main__':

main()

執行結果:

[

python@master thread

]$ python3 thread2.py

---所有執行緒開始執行...

執行緒( 1 ) 開始執行: 2018-11

-0820:00:47 ,先休眠( 2

)秒執行緒(

0 ) 開始執行: 2018-11

-0820:00:47 ,先休眠( 4

)秒執行緒(

1 )休眠結束,結束於: 2018-11

-0820:00:49

執行緒(

0 )休眠結束,結束於: 2018-11

-0820:00:51

---所有執行緒執行結束: 2018-11-08 20:00:51

使用了執行緒鎖。

Python多執行緒之event

事件 event 用於執行緒間同步和通訊。比如執行緒a要完成某一任務 event 執行緒b才能執行後面的 怎麼實現呢,就是用event。event常用方法 釋義set 開始乙個事件 wait 如果未設定set狀態會一直等待,否則過 clear 清除set狀態 isset 是否設定set狀態 注意 w...

Python多執行緒之threading

1.多執行緒的基礎函式及增加執行緒add thread import threading 1.基礎函式 def main print threading.active count 列印目前程序的數目 print threading.enumerate 檢視程序列表 print threading.c...

Python多執行緒程式設計之多執行緒加鎖

python語言本身是支援多執行緒的,不像php語言。下面的例子是多個執行緒做同一批任務,任務總是有task num個,每次執行緒做乙個任務 print 做完後繼續取任務,直到所有任務完成為止。1 coding utf 8 2import threading 34 start task 0 5 ta...