python threading Semaphore

Posted callyblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python threading Semaphore相关的知识,希望对你有一定的参考价值。

#Semaphore 是用于控制进入数量的锁,控制同时进行的线程,内部是基于Condition来进行实现的
#文件, 读、写, 写一般只是用于一个线程写,读可以允许有多个

#做爬虫
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("got html text success")
        self.sem.release()# 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() # acquire一次,semphore的数量就减一,知道数量为0时,它就会阻塞在这里
            html_thread = HtmlSpider("https://baidu.com/".format(i), self.sem)
            html_thread.start()

if __name__ == "__main__":
    sem = threading.Semaphore(3)
    url_producer = UrlProducer(sem)
    url_producer.start()

 

以上是关于python threading Semaphore的主要内容,如果未能解决你的问题,请参考以下文章

Python:进程(threading)

python库之_thread

python ---thread

python语言中threading.Thread类的使用方法

python thread 多线程

python threading模块怎么停止线程