线程池就是用来分配和管理线程的工具,如何实现线程池,下面我就给出一种实现方式:
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()
注意这里我只实现了基本功能,其他功能可以自己加。