執行緒同步
多工版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個...