fjqzyc 发表于 2018-8-10 11:06:02

42. Python Queue 模块

#!/usr/bin/env python  
# -*- coding:utf-8 -*-
  

  
from multiprocessing import Queue
  
from threading import Thread
  
import time
  

  

  
"""
  
写一个消费者和生产者,
  
用多线程方式实现,
  
通过类的重写的方法实现。
  
"""
  

  
class Proceducer(Thread):
  
    def __init__(self, queue):
  
      super(Proceducer,self).__init__()
  
      self.queue = 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_even(Thread):
  
    def __init__(self, queue):
  
      super(Consumer_even , self).__init__()
  
      self.queue = queue
  

  
    def run(self):
  
      try:
  
            while not self.queue.empty():
  
                number = self.queue.get(block=True, timeout=3)
  
                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
  

  

  
class Consumer_odd(Thread):
  
    def __init__(self, queue):
  
      super(Consumer_odd , self).__init__()
  
      self.queue = queue
  

  
    def run(self):
  
      try:
  
            while not self.queue.empty():
  
                number = self.queue.get(block=True, timeout=3)
  
                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
  

  

  

  

  

  
def main():
  
    queue = Queue()
  
    p = Proceducer(queue=queue)
  
    p.start()
  
    p.join()
  
    time.sleep(1)
  
    c1 = Consumer_even(queue=queue)
  
    c2 = Consumer_odd(queue=queue)
  

  
    c1.start()
  
    c2.start()
  
    c1.join()
  
    c2.join()
  
    print ("All thread terminate!")
  

  

  
if __name__ == '__main__':
  
    main()
页: [1]
查看完整版本: 42. Python Queue 模块