(七)多线程之(信号量,Event,定时器)


	(七)多线程之(信号量,Event,定时器)
[编程语言教程]

一、信号量(Semaphore)


信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人数是一定的,这便是信号量的大小。

from threading import Thread,Semaphore,currentThread
import time,random

# 同时只有3个线程可以获得semaphore,即可以限制最大连接数为3
s = Semaphore(3)    # 坑位

def task():
    # s.acquire()
    # print("%s come in." % currentThread().getName())
    # s.release()

    with s:     # 上下文管理,可以省略加锁和释放,效果和上面一样
        print("%s come in." % currentThread().getName())
        time.sleep(random.randint(1,3))     # 模拟每个人上的时间,每个人时间不同

if __name__ == ‘__main__‘:
    for i in range(10):
        t = Thread(target=task)
        t.start()
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » (七)多线程之(信号量,Event,定时器)