自定义线程池
线程池的自定义实现
这里借用了线程和队列模块,写了一个线程类和线程池类
1 import threading 2 import queue 3 import time 4 class MyThread(threading.Thread): 5 6 def __init__(self, queue): 7 super().__init__() 8 self.queue = queue 9 self.daemon = True 10 self.start() 11 12 def run(self): 13 while True: 14 func, args, kwargs = self.queue.get() # 获取任务 15 func(*args, **kwargs) 16 self.queue.task_done() 17 18 def join(self, timeout=None): 19 self.queue.join() 20 21 22 class MyPool(object): 23 24 def __init__(self, num): 25 self.num = num 26 self.queue = queue.Queue() 27 for i in range(self.num): 28 MyThread(self.queue) 29 30 def apply_async(self, func, args=(), kwargs={}): 31 self.queue.put((func, args, kwargs)) 32 33 def join(self): 34 self.queue.join() 35 36 37 def func1(): 38 print(threading.current_thread().getName()) 39 time.sleep(2) 40 if __name__ == '__main__': 41 start_time = time.time() 42 pool = MyPool(3) 43 for _ in range(4): 44 pool.apply_async(func1) 45 pool.join() 46 print(time.time() - start_time) 47 ############运行结果:########### 48 Thread-1 49 Thread-2 50 Thread-3 51 Thread-1 52 4.012118339538574
清澈的爱,只为中国