class ThreadPool(object):
def __init__(self, max_num=20):
# 创建一个队列,队列里最多只能有10个数据
self.queue = queue.Queue(max_num)
# 在队列里填充线程类
# 【线程类、线程类、线程类、线程类、线程类、线程类、线程类】
for i in range(max_num):
self.queue.put(threading.Thread)
def get_thread(self):
# 去队列里去数据,
# queue特性,如果有,对列里那一个出来
# 如果没有,阻塞,
return self.queue.get()
def add_thread(self):
# 往队列里再添加一个线程类
self.queue.put(threading.Thread)
# pool = ThreadPool(10)
pool = ThreadPool(10)
def func(arg, p):
# 函数内容
print(arg)
import time
time.sleep(2)
# 在线程池里重新添加一个线程(将线程归还给线程池)
p.add_thread()
for i in range(30):
# 去线程池里那一个线程,如果有,则池子里拿,如果没有,等直到有人归还线程到线程池
thread = pool.get_thread()
# thread = threading.Thread
t = thread(target=func, args=(i, pool))
t.start()