标志位:
import time,threading
event = threading.Event()
def lighter():
count = 0
event.set() ########################################################先预设个绿灯
while True:
if count > 10 and count < 20: ##################################过了10秒变红灯
event.clear()###############################################把标志位清了
print("\033[41;1mred light is on....\033[0m")
elif count > 20:################################################过了10秒变绿灯
event.set()
count = 0
else:
print("\033[42;1mgreen light is on....\033[0m")
time.sleep(1)
count +=1
def car(name):
while True:
if event.is_set():###############################################代表绿灯
print("[%s] running..."% name )
time.sleep(1)
else:
print("[%s] sees red light , waiting...." %name)
event.wait()
print("\033[34;1m[%s] green light is on, start going...\033[0m" %name)
light = threading.Thread(target=lighter,)
light.start()
car1 = threading.Thread(target=car,args=("Tesla",))
car1.start()
信号量:
import threading, time
def run(n):
semaphore.acquire()##################################建立信号量
time.sleep(5)
print("run the thread: %s\n" % n)
semaphore.release()
if __name__ == '__main__':
semaphore = threading.BoundedSemaphore(5) ##########最多允许5个线程同时运行,并且每出去一个就会马上进来一个
for i in range(100):
t = threading.Thread(target=run, args=(i,))
t.start()
time.sleep(0.5)
while threading.active_count() != 1:
time.sleep(1)
print(threading.active_count())
else:
print('----all threads done---')