11-5 控制线程数量

2018-08-26  本文已影响0人  正在努力ing

   多线程编程中,有时候一个数据,只能有一个线程进行“写”;但是可以有多个线程进行“读” ;

怎样控制只有一个线程写呢?

解决 用threading中的Semaphore

使用方法

from threading import Thread,Semaphore
import time

class gethtml(Thread):
    def __init__(self,sem,url):
        self.sem = sem
        self.url = url
        super(gethtml, self).__init__(name="小爱同学")

    def run(self):
        time.sleep(2)
        print(self.url)
        self.sem.release()   # 4 永远要记得释放锁

def mypass(sem):
    for i in range(20):
        sem.acquire()  # 3 永远要记得落锁
        th = gethtml(sem, i)
        th.start()
        
# 1 实例化
sem = Semaphore(3)

# 2 丢到线程里,变成线程实例的一个属性
thread = Thread(target=mypass,args=(sem,))
thread.start()

>>> 
0
1
2
---
3
4
5
....


改进,把他们全部类化

from threading import Thread,Semaphore

import time


class gethtml(Thread):
    def __init__(self,sem,url):
        self.sem = sem
        self.url = url
        super(gethtml, self).__init__(name="小爱同学")

    def run(self):
        time.sleep(2)
        print(self.url)
        self.sem.release()


class geturl(Thread):
    def __init__(self,sem):
        self.sem = sem
        super().__init__(name="天猫精灵")

    def run(self):
        for i in range(20):
            self.sem.acquire()
            th = gethtml(self.sem,i)
            th.start()

if __name__ == "__main__":

    sem3 = Semaphore(3)
    thread = geturl(sem3)
    thread.start()

上一篇 下一篇

猜你喜欢

热点阅读