python學習筆記 da36 訊號量

2022-02-06 19:42:49 字數 2236 閱讀 4063

訊號量本質也是鎖,只不過一把鎖可以有很多鑰匙(自己設定),決定同一時間可以有多個程序同時操作,其他程序會一直等待(阻塞)知道拿到鑰匙的程序釋放鑰匙;

from multiprocessing import

process,semaphore

sem=semaphore(4) #

設定四把鑰匙,表明可以同時開四個程序

sem.acquire() #

需要鑰匙

print("

第乙個程序拿到鑰匙,進來")

sem.acquire()

print("

第二個程序拿到鑰匙,可以進來")

sem.acquire()

print("

第三個程序拿到鑰匙,可以進來")

sem.acquire()

print("

第四個程序拿到鑰匙,可以進來")

#sem.acquire() # 發生阻塞,因為四把鑰匙已經被四個程序占用了

## print("第五個程序會一直等待,知道有程序釋放鑰匙")

執行結果:

當占有鑰匙的程序執行完畢之後,其他程序就會有機會拿到釋放的鑰匙,執行相應的操作:

from multiprocessing import

process,semaphore

sem=semaphore(4) #

設定四把鑰匙,表明可以同時開四個程序

sem.acquire() #

需要鑰匙

print("

第乙個程序拿到鑰匙,進來")

sem.acquire()

print("

第二個程序拿到鑰匙,可以進來")

sem.acquire()

print("

第三個程序拿到鑰匙,可以進來")

sem.acquire()

print("

第四個程序拿到鑰匙,可以進來")

sem.release()

#釋放乙個鑰匙

print("

釋放一把鑰匙")

sem.acquire()

#發生阻塞,因為四把鑰匙已經被四個程序占用了

print("

第五個程序拿到鑰匙了,可以執行

")

執行結果:

使用multiprocessing模組的semophore類,實現迷你唱吧(20個人只有四個人可以進去唱歌)所以可以開20個程序,但是設定四把鑰匙,也就是同一時間只有四個人可以進去唱吧:

from multiprocessing import

process,semaphore

import

time

import

random

defsing(i,sem):

sem.acquire()

#拿到一把鑰匙,才可以執行相應的操作(但是只有四把鑰匙,說明同一時間也只有四個程序執行sing())

print("

%s:在唱歌

"%i)

time.sleep(random.randint(1,10)) #

拿到鑰匙的程序(代表進入迷你唱吧的人)唱歌時間為1-10秒,模擬

print("

%s離開唱吧

"%i)

sem.release()

#該程序釋放鑰匙,代表進入唱吧的人離開唱吧,在外面等候的程序有機會拿到鑰匙,進入唱吧唱歌

if__name__=="

__main__":

sem=semaphore(4) #

鎖設定四把鑰匙,同一時間只有四個程序可以拿到鑰匙執行任務,模擬只有四個人進入唱吧唱歌

for i in range(20):

p=process(target=sing,args=(i,sem))

p.start()

執行結果:

Python3 6學習筆記(六)

wsgi 是為框架或伺服器開發人員提供的工具,而不是為應用人員提供的。伺服器呼叫時,應當以無快取的形式將產生的內容傳送給客戶端。方法 len close server gateway 端 中介軟體 middleware 扮演兩個角色 middleware常扮演以下角色 通過網路內的請求 實現負載均衡...

Python3 6學習筆記(六)

wsgi 是為框架或伺服器開發人員提供的工具,而不是為應用人員提供的。伺服器呼叫時,應當以無快取的形式將產生的內容傳送給客戶端。方法 len close server gateway 端 中介軟體 middleware 扮演兩個角色 middleware常扮演以下角色 通過網路內的請求 實現負載均衡...

地信準程式設計師python語言學習之路 day3

3.1.1 字典,key value 語法 info print info print info stu1211 查詢資訊 或者print info.get stu1103 info stu1101 程 修改資訊 print info info stu115 程 新增資訊 print info de...