使用列表模拟物品池,生产者往里放置东西,而消费者从池中获取物品。物品池满时生产者等待,空时消费者等待。假设物品池里面能够容纳5个元素,每个元素都是1-1000之间的整数。请编写代码实现并查看运行结果。
import threading
from random import randint
from time import sleep
class producer(threading.Thread):
def __init__(self,threadname):
threading.Thread.__init__(self,name=threadname)
def run(self):
global x
while True:
sleep(1)
con.acquire()
if len(x)==5:
print('生产者等待....')
con.wait()
else:
r=randint(1,1000)
print('producer:',r)
x.append(r)
con.notify()
con.release()
class consumer(threading.Thread):
def __init__(self,threadname):
threading.Thread.__init__(self,name=threadname)
def run(self):
global x
while True:
sleep(3)
con.acquire()
if not x:
print('消费者等待....')
con.wait()
e

本文通过Python的Condition对象探讨线程同步,以解决生产者和消费者的问题。文中介绍如何利用列表作为缓冲区,当达到最大容量(5个元素)时,生产者线程暂停,消费者可以从缓冲区取出元素,当缓冲区为空时,消费者线程等待,生产者继续添加元素。整个过程展示了Condition对象在线程通信中的应用。
最低0.47元/天 解锁文章
1750

被折叠的 条评论
为什么被折叠?



