一、线程池简易版
思路先创建一个队列,因为队列先进先出,使用后就消失了,队列里面储存最大线程数,方法一个是调取线程,一个是储存线程
import queue
import threading
import time
class ThreadPool(object):
#初始化类,所以创建线程初始化线程
def __init__(self,maxsize):
self.queue = queue.Queue()
for i in range(maxsize):
self.queue.put(threading.Thread)
#使用队列中 的get方法
def get_thread(self):
return self.queue.get()
#使用队列中put方法
def add_thread(self):
self.queue.put(threading.Thread)
#实验的方法
def f(i,ret):
time.sleep(0.2)
print(i,threading.current_thread())
#每次启动线程就往对了列中加等同的线程(最后剩余数等于最大线程数)
ret.add_thread()
#创建线程池对象
ret = ThreadPool(5)
for i in range(10):
#取出线程池中的线程(threading.Thread)相等于t =threading.Thread
p = ret.get_thread()
#调用线程池对象,加线程
t=p(target = f,args = (i,ret,))
t.start()
time.sleep(0.5)
print(ret.queue.qsize())
》》
3 <Thread(Thread-4, started 6264)>
4 <Thread(Thread-5, started 332)>
1 <Thread(Thread-2, started 7396)>
0 <Thread(Thread-1, started 2472)>
2 <Thread(Thread-3, started 8592)>
9 <Thread(Thread-10, started 6584)>
7 <Thread(Thread-8, started 5952)>
8 <Thread(Thread-9, started 1844)>
6 <Thread(Thread-7, started 8940)>
5 <Thread(Thread-6, started 2476)>
5
根据上面的代码发现,最后队列中的数量等于最大线程数也就是当线程都结束了,队列中实际还是保留着五个线程