python學習筆記(56) 程序的同步控制
阿新 • • 發佈:2018-11-23
訊號量: # 相當於多個鑰匙的Lock
form mutiprocessing import Semaphore
sem = Semaphore(5)
sem.acquire()
sem.release()
########################################
事件:
form mutiprocessing import Event
e = Event()
e.is_set() # 事件狀態,預設False
e.set() # 狀態改為Ture
e.wait() # 根據set值來決定是否在wait處阻塞
e.clear() # 狀態改為False
#######################################
紅綠燈
import time
import random
from multiprocessing import Process,Event
def cars(i,e):
if not e.is_set():
print('%s在等待...'%i)
e.wait()
print('%s已通過...'%i)
def traffic_light(e):
while True:
if e.is_set():
e.clear()
print('\033[31m紅燈亮了\033[0m')
else:
e.set()
print('\033[32m綠燈亮了\033[0m')
time.sleep(2)
if __name__ == '__main__':
e = Event()
traffic = Process(target=traffic_light,args=(e,))
traffic.start()
for i in range(20):
car = Process(target=cars,args=(i,e))
car.start()
time.sleep(random.random())