python之執行緒學習(二)

2021-10-07 19:13:08 字數 1750 閱讀 6052

執行緒同步

多工版udp聊天

當多個程序幾乎同時修改某乙個共享資料時,我們需要進行同步控制,否則會造成讀髒資料

**示例

import threading

import time

defa

(x, mutex)

:global num

# 上鎖

mutex.acquire(

)for i in

range

(x):

num +=

1# 釋放

mutex.release(

)print

(f'a: '

)def

b(x, mutex)

:global num

# 上鎖

mutex.acquire(

)for i in

range

(x):

num +=

1# 釋放

mutex.release(

)print

(f'b: '

)if __name__ ==

'__main__'

: mutex = threading.lock(

) num =

100 t1 = threading.thread(target=a, args=

(1000000

, mutex)

) t2 = threading.thread(target=b, args=

(1000000

, mutex)

) t1.start(

) t2.start(

)# 等待1秒,之後子執行緒已結束

time.sleep(1)

print

(num)

如果重複上了很多個lock鎖也會造成死鎖狀態

**示例

import threading

defa

(mutex)

: mutex.acquire(

) mutex.acquire(

)print

('a'

) mutex.release(

) mutex.release(

)if __name__ ==

'__main__'

: mutex = threading.lock(

) t = threading.thread(target=a, args=

(mutex,))

t.start(

)print

('main'

)

如果將lock鎖換成rlock鎖,就會避免死鎖問題

新增超時時間也可以避免死鎖

注意:程式設計時要盡量避免死鎖問題

threading裡面有乙個condition類,這個類裡有兩個方法,分別是__enter____exit__,所以使用這個類的時候可以以with的形式出現。使用condition類可以實現執行緒同步

當天貓精靈說完第一句話時,就會喚醒正在等待的小愛同學,之後天貓精靈就處於等待狀態,以此迴圈直到對話結束

學了多執行緒,也沒有用在乙個實際的例子裡,現在開發一款簡單的多工版udp聊天,可以同時傳送資訊和接收資訊

Python學習 之 執行緒

from threading import thread import time import random 用於併發執行的函式 deftask num time.sleep random.randint 1,3 print num if name main 建立乙個用於存放執行緒的 list 這種...

python學習二之多執行緒

python學習二之多執行緒 1.執行緒 多工可以由多程序完成,也可以由乙個程序內的多執行緒完成。我們前面提到了程序是由若干執行緒組成的,乙個程序至少有乙個執行緒。由於執行緒是作業系統直接支援的執行單元,因此,高階語言通常都內建多執行緒的支援,python也不例外,並且,python的執行緒是真正的...

python學習 二 之編碼

參考部落格 廖雪峰老師的python教程 print 會依次列印每個字串,遇到逗號 會輸出乙個空格 編譯器或者直譯器就是負責把符合語法的程式 轉換成cpu能夠執行的機器碼 python使用縮進來組織 塊,請務必遵守約定俗成的習慣,堅持使用4個空格的縮排。在文字編輯器中,需要設定把tab自動轉換為4個...