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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多线程笔记-- 生产者/消费者模式(续)相关的知识,希望对你有一定的参考价值。

 

用 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 多线程笔记-- 生产者/消费者模式(续)的主要内容,如果未能解决你的问题,请参考以下文章

我的多线程—多线程与设计模式阅读笔记

11.9-全栈Java笔记: 线程并发协作(生产者/消费者模式)

用Python多线程实现生产者消费者模式爬取斗图网的表情图片

Python 队列queue与多线程组合(生产者+消费者模式)

一、多线程下生产者消费者模式

Python 生产者消费者模式