Python实现线程池类

线程池就是用来分配和管理线程的工具,如何实现线程池,下面我就给出一种实现方式:

class SimpleThreadPoolExecutor:

    def __init__(self,maxSize=1,queueSize=100,waitTime=0):
        self.__task_queue=queue.Queue(queueSize)
        self.__maxSize=maxSize
        self.__runningSize=0
        self.__waitTime=waitTime
        self.__workerQueue=queue.Queue(10)
        self.mutex = threading.Lock()
    def execute(self,firstTask,firstArgs):
        self.mutex.acquire()
        self.__runningSize+=1
        self.mutex.release()
        # print('我是线程,我第一次运行')
        firstTask(*firstArgs)
        try:
            while 1:
                data = self.__task_queue.get(block=True, timeout=self.__waitTime)
                task = data[0]
                args = data[1]
                # print('我是线程我在循环内')
                task(*args)
        except:
            self.mutex.acquire()
            # print('self.__runningSize -= 1之前', self.__runningSize)
            self.__runningSize -= 1
            # print('self.__runningSize -= 1',self.__runningSize)
            self.mutex.release()
            print('我是线程,我退出了')
            return

    def getThreadSize(self):
        return self.__workerQueue.qsize()

    def submit(self,task,args):
        # print('running:',self.__runningSize,'真是数量:',self.getThreadSize())
        if self.__maxSize <= self.__runningSize:
            task = (task, args)
            self.__task_queue.put_nowait(task)
        else:
            thread = threading.Thread(target=self.execute, args=(task, args))
            
            thread.start()
            

注意这里我只实现了基本功能,其他功能可以自己加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值