首页 > 代码库 > 十五篇、自定义线程池之简单的线程池
十五篇、自定义线程池之简单的线程池
1 二、 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 import threading 4 import queue 5 import time 6 7 class ThreadPool(object): 8 def __init__(self,max_num = 20): 9 self.queue = queue.Queue(max_num) #创建一个最大长度为20的队列 10 for i in range(max_num): #往队列里面创建了20个位置的队列,每个位置放了一个Thread类名,指向内存地址相同 11 self.queue.put(threading.Thread) 12 13 def get_thread(self): 14 return self.queue.get()#这里的self指代的就是上面的这个队列 15 16 def add_thread(self): 17 self.queue.put(threading.Thread) 18 19 def func(pool,a1): 20 time.sleep(2) 21 print(a1) 22 pool.add_thread() 23 24 25 p = ThreadPool(10) #只要创建对象就会执行构造方法 在队列中创建类 26 for i in range(100): 27 #获得类 28 ret = p.get_thread() #这里ret就等于类名threading.Thread 29 t = ret(target=func,args=(p,i,)) #这里t 等于threading.Thread(target=func),相当于创建了一个线程 30 t.start() #相当于开始了执行线程。
上面执行流程:
1、首先创建一个队列,这个队列的最大长度为20
2、在每个队列里面放入threading.Thread类
3、给队列添加两个方法,方法一是取队列中的类;方法二 往队列中放置类
4、p = ThreadPool(10) 创建对象,并且指定每次执行多少个对象
5、去出类创建线程,并且开始执行func方法,执行完毕之后再把这个类放入到队列中
缺点:
从队列中拿出来类,创建了线程对象,执行完毕之后,这个线程对象并没有放入到队列之中,而是把类放入到了队列之中,线程放入到了内存之中,等待垃圾回收机制回收
一、
#!/usr/bin/env
python
#-*- coding:utf-8 -*-
import threading
import queue
import time
class ThreadPool(object):
def __init__(self,max_num = 20):
self.queue
= queue.Queue(max_num) #创建一个最大长度为20的队列
for i in range(max_num): #往队列里面创建了20个位置的队列,每个位置放了一个Thread类名,指向内存地址相同
self.queue.put(threading.Thread)
def get_thread(self):
return self.queue.get()#这里的self指代的就是上面的这个队列
def add_thread(self):
self.queue.put(threading.Thread)
def func(pool,a1):
time.sleep(2)
print(a1)
pool.add_thread()
p = ThreadPool(10) #只要创建对象就会执行构造方法 在队列中创建类
for i in range(100):
#获得类
ret = p.get_thread() #这里ret就等于类名threading.Thread
t = ret(target=func,args=(p,i,))
#这里t 等于threading.Thread(target=func),相当于创建了一个线程
t.start() #相当于开始了执行线程。这里注意,执行完毕之后要把这个线程放回到线程池里面
十五篇、自定义线程池之简单的线程池