1. 程式人生 > >python學習筆記(56) 程序的同步控制

python學習筆記(56) 程序的同步控制

 

訊號量:  # 相當於多個鑰匙的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())