控制代码进入线程的数量,控制并发数量,可以使用信号量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()