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

python 多线程笔记(6)-- 生产者/消费者模式(续)

时间:2016-02-03 06:40:07      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

 

用 threading.Event() 也可以实现生产者/消费者模式

(自己拍脑袋想出来的,无法知道其正确性,请大神告知为谢!)

 

import threading
import time
import random


products = 20

 
class Producer(threading.Thread):
    ‘‘‘生产者‘‘‘
    ix = [0] # 生产者实例个数
             # 闭包,必须是数组,不能直接 ix = 0
    
    def __init__(self):
        super().__init__()
        self.ix[0] += 1
        self.setName(生产者 + str(self.ix[0]))
 
    def run(self):
        global producer_signal, products
        
        while True:
            if products < 10:
                if not producer_signal.is_set(): producer_signal.set()
                products += 1;
                print("{}:库存告急。我努力生产了1件产品,现在产品总数量 {}".format(self.getName(), products))
            else:
                print("{}:库存充足。我努力生产了0件产品,现在产品总数量 {}".format(self.getName(), products))
                if producer_signal.is_set(): producer_signal.wait()
            time.sleep(random.randrange(1,4))
        
        
class Consumer(threading.Thread):
    ‘‘‘消费者‘‘‘
    ix = [0] # 消费者实例个数
             # 闭包,必须是数组,不能直接 ix = 0
             
    def __init__(self):
        super().__init__()
        self.ix[0] += 1
        self.setName(消费者 + str(self.ix[0]))
 
    def run(self):
        global consumer_signal, products
        
        while True:
            if products > 1:
                if not consumer_signal.is_set(): consumer_signal.set()
                products -= 1;
                print("{}:我消费了1件产品,现在产品数量 {}".format(self.getName(), products))
            else:
                print("{}:我消费了0件产品。现在产品数量 {}".format(self.getName(), products))
                if consumer_signal.is_set(): consumer_signal.wait()
            time.sleep(random.randrange(2,6))
 

        
        
if __name__ == "__main__":

    producer_signal = threading.Event()
    consumer_signal = threading.Event()
    
    for i in range(2):
        p = Producer()
        p.start()
 
    for i in range(10):
        c = Consumer()
        c.start()
 

 

python 多线程笔记(6)-- 生产者/消费者模式(续)

标签:

原文地址:http://www.cnblogs.com/hhh5460/p/5178878.html

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