Semaphore用法
生活随笔
收集整理的這篇文章主要介紹了
Semaphore用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
semaphore用法
#-*- encoding:utf-8 -*- import multiprocessing import time import sys reload(sys) sys.setdefaultencoding('utf-8')def worker(s, i):s.acquire()print(multiprocessing.current_process().name+":" + "acquire");time.sleep(i)print(multiprocessing.current_process().name +":"+ "releasen");s.release()print"--------------"if __name__ == "__main__":s = multiprocessing.Semaphore(3)#acquire代表3個可用資源-1。release表示現有可用資源+1for i in range(5):print"i=",ip = multiprocessing.Process(target = worker, args=(s, i*2))p.start()# 當一個線程想要訪問某個共享資源,首先,它必須獲得semaphore。 # 如果semaphore的內部計數器的值大于0,那么semaphore減少計數器的值并允許訪問共享的資源。 # 計數器的值大于0表示,有可以自由使用的資源,所以線程可以訪問并使用它們。 # 另一種情況,如果semaphore的計數器的值等于0, # 那么semaphore讓線程進入休眠狀態一直到計數器大于0。 # 計數器的值等于0表示全部的共享資源都正被線程們使用,所以此線程想要訪問就必須等到某個資源成為自由的。 # 當線程使用完共享資源時,他必須放出semaphore為了讓其他線程可以訪問共享資源。 # 這個操作會增加semaphore的內部計數器的值總結
以上是生活随笔為你收集整理的Semaphore用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进程锁Lock
- 下一篇: python可变数据类型与不可变数据类型