可以重复利用的线程
# -*- coding: utf-8 -*- """ 线程重复使用 """ from threading import Thread from queue import Queue def func(a, b, c): print('a') def func1(a, b): print('b') # 子线程 class Mythread(Thread): def __init__(self): super().__init__() self.queue = Queue(3) # __init__在函数执行前运行,也就是在主线程执行的 self.daemon = True # 设置为守护线程 def run(self): while True: func, args, kwargs = self.queue.get() func(*args, **kwargs) self.queue.task_done() # 队列计数器 -1 def apply_async(self, func, args=(), kwargs={}): self.queue.put((func, args, kwargs)) # 队列计数器 +1 # print(self.queue.qsize()) def join(self): self.queue.join() # 重写thread join方法,调用queue join if __name__ == "__main__": my_thread = Mythread() # 传参 my_thread.apply_async(func, (1, 2, 3)) # 调用apply_async方法在主线程中执行 计数器 +1 my_thread.apply_async(func1, (1, 2)) # 计数器 +2 my_thread.start() my_thread.join() ''' 思路:设置为守护线程(主线程结束子线程就结束)。join方法在主线程调用使得主线程处于阻塞, 一直到子线程中的计数器为0才解阻塞。此时主线程结束,子线程也结束 '''