python執行緒的概念

2021-09-18 01:54:32 字數 3726 閱讀 2874

執行緒

python的thread模組是比較底層的模組,python的threading模組是對thread做了一些包裝的,可以更加方便的被使用

使用threading模組

單執行緒執行

#coding=utf-8

import time

def saysorry():

print("親愛的,我錯了,我能吃飯了嗎?")

time.sleep(1)

if __name__ == "__main__":

for i in range(5):

saysorry()

多執行緒執行

#coding=utf-8

import threading

import time

def saysorry():

print("親愛的,我錯了,我能吃飯了嗎?")

time.sleep(1)

if __name__ == "__main__":

for i in range(5):

t = threading.thread(target=saysorry)

t.start() #啟動執行緒,即讓執行緒開始執行

說明

可以明顯看出使用了多執行緒併發的操作,花費時間要短很多

當呼叫start()時,才會真正的建立執行緒,並且開始執行

2. 主線程會等待所有的子執行緒結束後才結束

#coding=utf-8

import threading

from time import sleep,ctime

def sing():

for i in range(3):

print("正在唱歌...%d"%i)

sleep(1)

def dance():

for i in range(3):

print("正在跳舞...%d"%i)

sleep(1)

if __name__ == '__main__':

print('---開始---:%s'%ctime())

t1 = threading.thread(target=sing)

t2 = threading.thread(target=dance)

t1.start()

t2.start()

#sleep(5) # 遮蔽此行**,試試看,程式是否會立馬結束?

print('---結束---:%s'%ctime())

檢視執行緒數量

#coding=utf-8

import threading

from time import sleep,ctime

def sing():

for i in range(3):

print("正在唱歌...%d"%i)

sleep(1)

def dance():

for i in range(3):

print("正在跳舞...%d"%i)

sleep(1)

if __name__ == '__main__':

print('---開始---:%s'%ctime())

t1 = threading.thread(target=sing)

t2 = threading.thread(target=dance)

t1.start()

t2.start()

while true:

length = len(threading.enumerate())

print('當前執行的執行緒數為:%d'%length)

if length<=1:

break

sleep(0.5)

執行緒-注意點

執行緒執行**的封裝

通過上一小節,能夠看出,通過使用threading模組能完成多工的程式開發,為了讓每個執行緒的封裝性更完美,所以使用threading模組時,往往會定義乙個新的子類class,只要繼承threading.thread就可以了,然後重寫run方法

示例如下:

#coding=utf-8

import threading

import time

class mythread(threading.thread):

def run(self):

for i in range(3):

time.sleep(1)

msg = "i'm "+self.name+' @ '+str(i) #name屬性中儲存的是當前執行緒的名字

print(msg)

if __name__ == '__main__':

t = mythread()

t.start()

說明

python的threading.thread類有乙個run方法,用於定義執行緒的功能函式,可以在自己的執行緒類中覆蓋該方法。而建立自己的執行緒例項後,通過thread類的start方法,可以啟動該執行緒,交給python虛擬機器進行排程,當該執行緒獲得執行的機會時,就會呼叫run方法執行執行緒。

2. 執行緒的執行順序

#coding=utf-8

import threading

import time

class mythread(threading.thread):

def run(self):

for i in range(3):

time.sleep(1)

msg = "i'm "+self.name+' @ '+str(i)

print(msg)

def test():

for i in range(5):

t = mythread()

t.start()

if __name__ == '__main__':

test()

執行結果:(執行的結果可能不一樣,但是大體是一致的)

i'm thread-1 @ 0

i'm thread-2 @ 0

i'm thread-5 @ 0

i'm thread-3 @ 0

i'm thread-4 @ 0

i'm thread-3 @ 1

i'm thread-4 @ 1

i'm thread-5 @ 1

i'm thread-1 @ 1

i'm thread-2 @ 1

i'm thread-4 @ 2

i'm thread-5 @ 2

i'm thread-2 @ 2

i'm thread-1 @ 2

i'm thread-3 @ 2

說明

從**和執行結果我們可以看出,多執行緒程式的執行順序是不確定的。當執行到sleep語句時,執行緒將被阻塞(blocked),到sleep結束後,執行緒進入就緒(runnable)狀態,等待排程。而執行緒排程將自行選擇乙個執行緒執行。上面的**中只能保證每個執行緒都執行完整個run函式,但是執行緒的啟動順序、run函式中每次迴圈的執行順序都不能確定。

總結每個執行緒預設有乙個名字,儘管上面的例子中沒有指定執行緒物件的name,但是python會自動為執行緒指定乙個名字。

當執行緒的run()方法結束時該執行緒完成。

無法控制線程排程程式,但可以通過別的方式來影響執行緒排程的方式。

執行緒的概念

多工 作業系統執行多個程序,cpu有分時機制,讓所有的都能迴圈獲得自己的cpu時間片,但是輪轉快,所以使得程式像是同時運轉 執行緒 乙個程序內部單一的乙個順序控制流,是乙個程序同時執行多個執行緒 為了建立執行緒可以從thread中進行繼承,這個類裡包含建立和執行的所有執行緒的東西,thread最重要...

執行緒的概念

程序是乙個具有一定獨立功能的程式在乙個資料集上的一次動態執行的過程,是作業系統進行資源分配和排程的乙個獨立單位,是應用程式執行的載體。程序一般由程式 資料集合和程序控制塊三部分組成,程式用於描述程序要完成的功能,是控制程序執行的指令集 資料集合是程式在執行時所需要的資料和工作區 程式控制塊包含程序的...

Python高階(2) 程序與執行緒的概念

程序定義 程序就是乙個程式在乙個資料集上的一次動態執行過程。程序一般由程式 資料集 程序控制塊三部分組成,是最小的資源管理單元 程式 用來描述程序要完成哪些功能以及如何完成 資料集 則是程式在執行過程中所需要使用的資源 程序控制塊 用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利用它來控制...