可重复利用的线程

 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()方法会默认执行。