python多线程————6、线程同步之Semaphore

本文介绍如何使用Python的Semaphore来控制线程并发数量,通过实例演示了如何限制爬虫的并发请求,防止因请求过多导致服务器负载过高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制代码进入线程的数量,控制并发数量,可以使用信号量Semaphore。

1、定义信号量sem  =  threading.Semaphore(3)  #3为并发数量

2、消耗信号量 sem.acquire()

3、释放信号量 sem.release()

#Semaphore是用于控制进入数量的锁
#文件,读、写, 写一般只是用于一个线程写,读可以允许多个


#做爬虫
import threading
import time
class HtmlSpider(threading.Thread):
    def __init__(self,url,sem):
        super(HtmlSpider, self).__init__()
        self.url = url
        self.sem = sem

    def run(self):
        time.sleep(2)
        print('Got html secessful!')
        sem.release()

class UrlProducer(threading.Thread):
    def __init__(self,sem):
        super().__init__()
        self.sem = sem
    def run(self):
        for i in range(20):
            sem.acquire()
            thread_html = HtmlSpider("http://www.baidu.com/{}".format(i),self.sem)
            thread_html.start()
if __name__ == "__main__":
    sem = threading.Semaphore(3)
    producer_thread = UrlProducer(sem)
    producer_thread.start()



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值