标签:方法 功能 one join() inf port elf 生产者 daemon
思路:
利用thread类中,run方法在子线程中调用,其他方法在主线程调用,所以将生产者写入主线程,将消费者写入run函数中在子线程中执行,完成生产者消费者模型
注意:
1. 要在 init 函数中实例化一个Queue队列作为生产者消费者中介
2. 要在 init 函数中把daemon值设为True ,把该线程设置为守护进程,不然结束不了线程
3. 一般线程的 .join() 函数 满足不了当前功能,需重写,用计数器控制的queue.join() 代替
4. start()函数可以在外部调用,也可写在 init 函数中,省去外部调用的步骤
代码:
import threading
import queue
#消费者与生产者模式去实现我们可重复利用的线程
#主线程为生产者,子线程为消费者
class Mythread(threading.Thread):
def __init__(self):
super().__init__()
self.q = queue.Queue()
self.daemon = True #设置守护线程,主线程结束,子线程接着结束
self.start()
def run(self): #run里面的东西是在我们的子进程里面去执行,且只有run是在子进程里面
while True:
func = self.q.get() #拿任务
func() #执行任务
self.q.task_done()
def pro(self,func): #定义生产者函数
self.q.put(func)
def join(self):
self.q.join() #阻塞,直到计数器为0
def func1():
print(1)
def func2():
print(2)
t = Mythread()
# t.start() #可以写在类定义的init函数中,省去这一步
t.pro(func1)
t.pro(func2)
t.pro(func1)
t.join()
print("结束 ")
图例:
标签:方法 功能 one join() inf port elf 生产者 daemon
原文地址:https://www.cnblogs.com/cxhzy/p/10000369.html