可重复利用的线程
1 import threading 2 import queue 3 4 5 class MyThread(threading.Thread): 6 7 def __init__(self): 8 super().__init__() 9 self.queue = queue.Queue() 10 self.daemon = True # 线程守护,子线程会随着主线程结束而结束 11 12 def run(self): 13 while True: 14 func, args, kwargs = self.queue.get() # 获取任务 15 print(func) 16 func(*args, **kwargs) 17 self.queue.task_done() 18 19 def apply_async(self, func, args=(), kwargs={}): # 接受任务 20 self.queue.put((func, args, kwargs)) 21 22 def join(self, timeout=None): # 队列内部有一个计数器,每次put加1,task_done减1 23 self.queue.join() 24 25 26 def func1(): 27 print('1357') 28 29 30 def func2(): 31 print('2468') 32 33 34 t = MyThread() 35 t.start() 36 t.apply_async(func1) 37 t.apply_async(func2) 38 t.join()
这里写了一个线程类,用t实例化之后,调用了t的apply_async()方法,这里面会有一些父类的操作,即run()方
法和jion()方法会默认执行。