生产者与消费者问题python
时间: 2023-11-03 12:06:01 浏览: 91
生产者与消费者问题
生产者-消费者问题是一个经典的同步问题,主要涉及到多个线程之间的协作和资源竞争。在Python中,可以使用`threading`模块来实现生产者-消费者问题。
以下是一个简单的生产者-消费者问题的Python实现:
```python
import threading
import time
import random
# 共享资源,初始为空
resource = None
# 条件变量
condition = threading.Condition()
# 生产者线程函数
def producer():
global resource
while True:
# 获取锁
condition.acquire()
# 如果资源不为空,等待消费者消费
while resource is not None:
condition.wait()
# 生产资源
resource = random.randint(1, 100)
print("生产者生产了一个资源:", resource)
# 通知消费者消费
condition.notify()
# 释放锁
condition.release()
# 等待一段时间
time.sleep(random.random())
# 消费者线程函数
def consumer():
global resource
while True:
# 获取锁
condition.acquire()
# 如果资源为空,等待生产者生产
while resource is None:
condition.wait()
# 消费资源
print("消费者消费了一个资源:", resource)
resource = None
# 通知生产者生产
condition.notify()
# 释放锁
condition.release()
# 等待一段时间
time.sleep(random.random())
# 创建生产者线程和消费者线程
p = threading.Thread(target=producer)
c = threading.Thread(target=consumer)
# 启动线程
p.start()
c.start()
# 等待线程结束
p.join()
c.join()
```
在上面的代码中,我们使用了一个共享变量`resource`表示生产者生产的资源,使用了一个条件变量`condition`来协调生产者和消费者之间的同步。在生产者线程中,如果资源不为空,就等待消费者消费;如果资源为空,就生产一个资源并通知消费者。在消费者线程中,如果资源为空,就等待生产者生产;如果资源不为空,就消费掉资源并通知生产者。
阅读全文