|
from multiprocessing import Process, Pipe, Queue
import time
from threading import Thread
class Proceduer(Thread):
def __init__(self,queue):
super(Proceduer,self).__init__() # 超类
self.queue = queue #将queue赋给self.queue,便于类中其他函数调用
def run(self):
try:
for i in xrange(1,10):
print("put data is: {0} to queue".format(i))
self.queue.put(i)
except Exception as e:
print("put data error")
raise e
class Consumer_odd(Thread):
def __init__(self,queue):
super(Consumer_odd, self).__init__()
self.queue = queue
def run(self):
try:
while self.queue.empty: #判断消息队列是否为空
number = self.queue.get() #取到消息值
if number%2 != 0:
print("get {0} from queue ODD".format(number))
else:
self.queue.put(number) #将信息放回队列中
time.sleep(1)
except Exception as e:
raise e
class Consumer_even(Thread):
def __init__(self,queue):
super(Consumer_even,self).__init__()
self.queue = queue
def run(self):
try:
while self.queue.empty:
number = self.queue.get()
if number%2 == 0:
print("get {0} from queue Even,thread name is :{1}".format(number,self.getName()))
else:
self.queue.put(number)
time.sleep(1)
except Exception as e:
raise e
def main():
queue = Queue() #实例化一个消息队列
p = Proceduer(queue=queue) #消息队列作为参数赋值给生产者函数,并实例化
p.start() #启动一个带消息队列的函数
p.join() #等待结束
time.sleep(1)
c1 = Consumer_odd(queue=queue) #消息队列作为参数赋值给消费者函数,并实例化
c2 = Consumer_even(queue=queue) #消息队列作为参数赋值给消费者函数,并实例化
c1.start()
c2.start()
c1.join()
c2.join()
print("All threads terminate!")
if __name__ == "__main__":
main() |
|
|