信号量: # 相当于多个钥匙的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())