Python教程

python 多线程信号生产者消费者例子

本文主要是介绍python 多线程信号生产者消费者例子,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题:
生产者一次生产完6个后,消费者开始消费,消费完6个后,接着开始生产

条件对象实现:

import threading, time
"""
    生产5个开始消费

"""

count = 0
# 用 Sem
semaphore = threading.Condition()

class Product(threading.Thread):
    def run(self):
        global count
        semaphore.acquire()
        while True:
            if count <= 5:
                count += 1
                time.sleep(2)
                print(f"开始生产:生产1个,现在{count}个")
            else:
                print("生产够了,开始消费")
                semaphore.notify()
                semaphore.wait()
            
            
    

class Consume(threading.Thread):
    def run(self):
        global count
        semaphore.acquire()
        while True:
            if count > 0:
                count -= 1
                time.sleep(2)
                print(f"开始消费:消费1个,现在{count}个")
                
            else:
                print("消费够了,开始生产")
                semaphore.notify()
                semaphore.wait()

信号量对象实现

count = 0
# 用 Sem
semaphore1 = threading.Semaphore(1)
semaphore2 = threading.Semaphore(0)

class Product(threading.Thread):
    def run(self):
        global count
        semaphore1.acquire()
        while True:
            if count <= 5:
                count += 1
                time.sleep(2)
                print(f"开始生产:消费1个,现在{count}个")
            else:
                semaphore2.release()
                print("生产够了,开始消费")
                semaphore1.acquire()
                
                
            
            
    

class Consume(threading.Thread):
    def run(self):
        global count
        semaphore2.acquire()
        while True:
            if count > 0:
                count -= 1
                time.sleep(2)
                print(f"开始消费:消费1个,现在{count}个")
                
            else:
                
                semaphore1.release()
                print("消费够了,开始生产")
                semaphore2.acquire()

时间对象实现

count = 0
# 用 Sem
event1 = threading.Event()
event2 = threading.Event()

class Product(threading.Thread):
    def run(self):
        global count
        while True:
            if count <= 5:
                count += 1
                time.sleep(2)
                print(f"开始生产:生产1个,现在{count}个")
            else:
                
                print("生产够了,开始消费")
                event2.set()
                event1.clear()
                event1.wait()
                
                

class Consume(threading.Thread):
    def run(self):
        global count
        while True:
            event2.wait()
            if count > 0:
                count -= 1
                time.sleep(2)
                print(f"开始消费:消费1个,现在{count}个") 
            else:
                print("消费够了,开始生产")
                event1.set()
                event2.clear()
                event2.wait()

主程序:

product = Product()
product.start()

consume = Consume()
consume.start()
这篇关于python 多线程信号生产者消费者例子的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!