美文网首页
python queue

python queue

作者: 第八共同体 | 来源:发表于2017-12-18 15:29 被阅读0次

    转载:http://www.jb51.net/article/58004.htm

    # coding:utf8
    import random, threading, time
    from Queue import Queue
    
    
    # Producer thread
    class Producer(threading.Thread):
        def __init__(self, t_name, queue):
            threading.Thread.__init__(self, name=t_name)
            self.data = queue
    
        def run(self):
            for i in range(10):  # 随机产生10个数字 ,可以修改为任意大小
                randomnum = random.randint(1, 99)
                print "%s: %s is producing %d to the queue!" % (time.ctime(), self.getName(), randomnum)
                self.data.put(randomnum)  # 将数据依次存入队列
                time.sleep(1)
            print "%s: %s finished!" % (time.ctime(), self.getName())
    
    
    # Consumer thread
    class Consumer_even(threading.Thread):
        def __init__(self, t_name, queue):
            threading.Thread.__init__(self, name=t_name)
            self.data = queue
    
        def run(self):
            while 1:
                try:
                    val_even = self.data.get(1,
                                             5)  # get(self, block=True, timeout=None) ,1就是阻塞等待,5是超时5秒
                    if val_even % 2 == 0:
                        print "%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(), self.getName(), val_even)
                        time.sleep(2)
                    else:
                        self.data.put(val_even)
                        time.sleep(2)
                except:  # 等待输入,超过5秒 就报异常
                    print "%s: %s finished!" % (time.ctime(), self.getName())
                    break
    
    
    class Consumer_odd(threading.Thread):
        def __init__(self, t_name, queue):
            threading.Thread.__init__(self, name=t_name)
            self.data = queue
    
        def run(self):
            while 1:
                try:
                    val_odd = self.data.get(1, 5)
                    if val_odd % 2 != 0:
                        print "%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(), self.getName(), val_odd)
                        time.sleep(2)
                    else:
                        self.data.put(val_odd)
                        time.sleep(2)
                except:
                    print "%s: %s finished!" % (time.ctime(), self.getName())
                    break
    
    
    # Main thread
    def main():
        queue = Queue()
        producer = Producer('Pro.', queue)
        consumer_even = Consumer_even('Con_even.', queue)
        consumer_odd = Consumer_odd('Con_odd.', queue)
        producer.start()
        consumer_even.start()
        consumer_odd.start()
        producer.join()
        consumer_even.join()
        consumer_odd.join()
        print 'All threads terminate!'
    
    
    if __name__ == '__main__':
        main()
    

    相关文章

      网友评论

          本文标题:python queue

          本文链接:https://www.haomeiwen.com/subject/bvdmwxtx.html