1. 程式人生 > >python多執行緒————6、執行緒同步之Semaphore

python多執行緒————6、執行緒同步之Semaphore

控制程式碼進入執行緒的數量,控制併發數量,可以使用訊號量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()