码迷,mamicode.com
首页 > 编程语言 > 详细

用面向对象重写thread 实现多次调用一个线程

时间:2018-11-22 14:28:52      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:方法   功能   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("结束 ")
图例:
    技术分享图片

 

 

用面向对象重写thread 实现多次调用一个线程

标签:方法   功能   one   join()   inf   port   elf   生产者   daemon   

原文地址:https://www.cnblogs.com/cxhzy/p/10000369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!