執行緒 注意點

2022-09-03 17:30:10 字數 1683 閱讀 7453

1. 執行緒執行**的封裝

通過上一小節,能夠看出,通過使用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()

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()方法結束時該執行緒完成。

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

多工04 執行緒 注意點

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

關於執行緒注意點和互斥鎖

執行緒同步能夠保證多個執行緒安全訪問競爭資源,最簡單的同步機制是引入互斥鎖。互斥鎖為資源引入乙個狀態 鎖定 非鎖定。某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為 鎖定 其他執行緒不能更改 直到該執行緒釋放資源,將資源的狀態變成 非鎖定 其他的執行緒才能再次鎖定該資源。互斥鎖保證了每次只有...

mysql 注意 mysql 注意點

mysql 優化 每個innodb 表都要有乙個主鍵 限制表上索引的數量,避免建立重複和冗餘索引 注意合理選擇復合索引鍵值的順序 優先選擇符合儲存需要的最小的資料型別 varchar n 中的n 代表的是字元數,而不是位元組數 使用utf8 儲存漢字 varchar 255 765 個位元組 過大的...