06、线程同步[ 线程安全 ] -- semaphore 【信号量】

it2025-12-14  6

01、semaphore -- 以爬虫作为案例进行讲解

--semaphore: 是控制进入数量的锁 --举例: 文件的读写:一般写入只允许一个进程来操作写入的进程,但是读出的进程一般都是允许多个的 --读和写可共存 --读和读可共存 --写与写互斥 爬虫:一次并发20个太多,需要每次三个三个的执行,这里就以爬虫作为案例进行讲解 --代码示例: import threading import time # 做爬虫 class HtmlSpider(threading.Thread): def __init__(self, url, sem): super().__init__() self.url = url self.sem = sem def run(self): time.sleep(2) print('get html text success') self.sem.release() # 每次释放加1 class UrlProducer(threading.Thread): def __init__(self, sem): super().__init__() self.sem = sem def run(self): for i in range(20): self.sem.acquire() # 每调用一次数字减一,这里初始值为3只能调用3此 html_thread = HtmlSpider("https://www.baidu.com/{}".format(str(i)), self.sem) html_thread.start() if __name__ == '__main__': # 注意这里线程套线程,非常经典案例 # 我们希望控制每次的并发量,不是20例如每次3个 # 就需要最多三个,释放一个加入一个,不能超过3 sem = threading.Semaphore(3) url_producer = UrlProducer(sem) url_producer.start()

 

最新回复(0)