10.信号量

信号量是一种并行的锁,每新建一个信号量,并行的锁数目加一。建立信号量后,每程序中同时只能有与信号量相同数目的线程可以执行,一个信号量只能进入一个线程。

因此设置信号量数目后,能够一起运行的线程与信号量数目相同。信号量中前面线程都结束以后,后面的线程才能进入信号量中,

会造成一种信号量中的线程是同时运行的,实际上他们的运行也分先后顺序

信号量可用来限制同一时间有多少线程来访问数据库

class myThread(threading.Thread):
    def run(self):
        semaphore.acquire()     #开始加锁
        print(self.name)
        time.sleep(3)
        semaphore.release()    #释放信号量
if __name__=='__main__':
    semaphore=threading.BoundedSemaphore(5)     #设置信号量的数目
    thrs=[]
    for i in range(100): #同时创建了100个进程,但是因为设置了信号量为5,只能同时执行5个线程,前5个执行完毕后,再执行下5个
        thrs.append(myThread())
    for i in thrs:
        i.start()

 

posted @ 2020-10-29 22:49  maday  阅读(127)  评论(0)    收藏  举报