日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python多线程网络编程_python之网络编程-多线程

發(fā)布時間:2025/3/20 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python多线程网络编程_python之网络编程-多线程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

死鎖現(xiàn)象,遞歸鎖

所謂死鎖:是指兩個或兩個以上的進程或線程在執(zhí)行過程中,因為爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,他們將無法推進下去,此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠在相互等待的進程稱為死鎖進程。

from threading import Thread

from threading import Lock

import time

lock_A = Lock()

lock_B = Lock()

class MyThread(Thread):

def run(self):

self.f1()

self.f2()

def f1(self):

lock_A.acquire()

print(f'{self.name}拿到了鎖A')

lock_B.acquire()

print(f'{self.name}拿到了鎖B')

lock_B.release()

lock_A.release()

def f2(self):

lock_B.acquire()

print(f'{self.name}拿到了鎖B')

time.sleep(1)

lock_A.acquire()

print(f'{self.name}拿到了鎖A')

lock_A.release()

lock_B.release()

if __name__ == '__main__':

for i in range(1,4):

t = MyThread()

t.start()

# Thread-1拿到了鎖A

# Thread-1拿到了鎖B

# Thread-1拿到了鎖B

# Thread-2拿到了鎖A

# 鎖死了....

遇到死鎖現(xiàn)象可通過 遞歸鎖解決。

在Python中為了支持在同一線程中多次請求同一資源,python提供了可重入鎖RLock。

這個RLock內(nèi)部維護著一個Lock和一個counter變量,counter記錄了acquire的次數(shù),從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。上面的例子如果使用RLock代替Lock,則不會發(fā)生死鎖:

from threading import Thread

from threading import RLock

import time

lock_A = RLock()

class MyThread(Thread):

def run(self):

self.f1()

self.f2()

def f1(self):

lock_A.acquire()

print(f'{self.name}拿到了鎖A')

lock_A.acquire()

print(f'{self.name}拿到了鎖B')

lock_A.release()

lock_A.release()

def f2(self):

lock_A.acquire()

print(f'{self.name}拿到了鎖B')

time.sleep(1)

lock_A.acquire()

print(f'{self.name}拿到了鎖A')

lock_A.release()

lock_A.release()

if __name__ == '__main__':

for i in range(1,4):

t = MyThread()

t.start()

# Thread-1拿到了鎖A

# Thread-1拿到了鎖B

# Thread-1拿到了鎖B

# Thread-1拿到了鎖A

# Thread-2拿到了鎖A

# Thread-2拿到了鎖B

# Thread-2拿到了鎖B

# Thread-2拿到了鎖A

# Thread-3拿到了鎖A

# Thread-3拿到了鎖B

# Thread-3拿到了鎖B

# Thread-3拿到了鎖A

'''

遞歸鎖是一把鎖,鎖上有記錄,只要acquire一次,鎖上就計數(shù)1次, acquire2次,鎖上就計數(shù)2次,

release1次,減一,

只要遞歸鎖計數(shù)不為0,其他線程不能搶.

'''

總結(jié)

以上是生活随笔為你收集整理的python多线程网络编程_python之网络编程-多线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。