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()
            

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

猜你喜欢

转载自blog.csdn.net/a1053904672/article/details/83025765