事件和信号量

from threading import Thread,Semaphore
import time

def func(sem,a,b):
    sem.acquire()
    time.sleep(0.5)
    print(a+b)
    sem.release()

sem = Semaphore(4)
t_lst = []
for i in range(10):
    t = Thread(target=func,args=(sem,i,i+5))
    t.start()
    t_lst.append(t)
for t in t_lst: t.join()
print('主线程')

 

import time,random
from threading import Thread,Event

def connect_db(e):
    count = 0
    while count < 3:
        e.wait(0.5)
        if e.is_set() == True:
            print('连接至数据库')
            break
        else:
            count += 1
            print('第%d次连接失败'%count)
    else:
        raise TimeoutError('连接超时')

def check_web(e):
    time.sleep(random.randint(0,3))
    e.set()

e = Event()
t1 = Thread(target=connect_db,args=(e,))
t2 = Thread(target=check_web,args=(e,))
t1.start()
t2.start()

 

posted @ 2018-09-10 18:57  Woowo  阅读(129)  评论(0编辑  收藏  举报