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