Python利用Semaphore控制线程数量

最近写Python需要用到线程,考虑到机器性能和网站访问限制情况,又不能使用太多的限制,所以研究了下线程控制,在此分享给大家。
使用起来很简单,利用Semaphore控制线程需要用到3个函数:
sem = threading.Semaphore(4) # 限制线程的最大数量为4个(控制线程数量)
sem.acquire() # 获得线程,可用线程数减1(获取线程)
sem.release() # 释放线程数,线程数加1(释放线程)

import threading,time,random
def get_num(i,sem):
    sleeptime = random.randint(1,5)
    print("开始第"+str(i)+"个线程:"+str(sleeptime)+"秒")
    time.sleep(sleeptime)
    sem.release()  # 释放线程数,线程数加1
    print("~结束第" + str(i) + "个线程")
    return

def main():
    sem = threading.Semaphore(4)  # 限制线程的最大数量为4个
    for i in range(1,10):
        sem.acquire()  # 获得线程,可用线程数减1
        # th = threading.Thread(target=get_num,args=(i, sem))   #给执行函数传递值
        # th.start()    #执行函数
        threading.Thread(target=get_num, args=(i, sem)).start() #给执行函数传递值,包括sem线程锁,并执行函数

if __name__ ==  "__main__":
    main()

这个程序是模拟线程执行,模拟9个线程,每个线程执行时利用sleep随机时间模拟执行时间,执行结果如下:
执行结果
执行结果符合预期!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值