python 多线程信号生产者消费者例子
2021/4/14 20:25:18
本文主要是介绍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 多线程信号生产者消费者例子的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python