python queue 生产者 消费者_python 队列Queue之生产者消费者实例

本文探讨了使用FIFO队列实现的生产者消费者模型中,为何生产者生产3、4、5后消费者按3、5顺序消费的现象。通过代码示例和解释,揭示了消费者线程交替执行导致的消费顺序不一致,并提出了队列满空判断的优化建议。
摘要由CSDN通过智能技术生成

生产者每次生产一个产品

消费者每次消费两个产品

采用了FIFO模式

queue4 = queue.Queue()

goods = 1

lock = threading.Lock()

def Productor(name):

'''生产者'''

global goods

while True:

lock.acquire()

queue4.put("商品:{}".format(goods))

print(name,"生产 商品:{}".format(goods))

goods += 1

lock.release()

time.sleep(1)

def Customer(name):

'''消费者'''

while True:

str1 = queue4.get()

str2 = queue4.get()

print(name, '消耗',str1,str2)

queue4.task_done()

time.sleep(1)

productor1 = threading.Thread(target=Productor, args=('生产者a',))

productor2 = threading.Thread(target=Productor, args=('生产者b',))

customer1 = threading.Thread(target=Customer, args=('消费者a',))

customer2 = threading.Thread(target=Customer, args=('消费者b',))

customer3 = threading.Thread(target=Customer, args=('消费者c',))

productor1.start()

productor2.start()

customer1.start()

customer2.start()

customer3.start()

运行以后的控制台输出结果:

生产者a 生产 商品:1

生产者b 生产 商品:2

消费者a 消耗 商品:1 商品:2

生产者a 生产 商品:3

生产者b 生产 商品:4

生产者a 生产 商品:5

消费者b 消耗 商品:3 商品:5

生产者b 生产 商品:6

生产者a 生产 商品:7

消费者c 消耗 商品:4 商品:7

生产者b 生产 商品:8

消费者a 消耗 商品:6 商品:8

生产者b 生产 商品:9

生产者a 生产 商品:10

消费者a 消耗 商品:9 商品:10

生产者b 生产 商品:11

生产者a 生产 商品:12

生产者a 生产 商品:13

生产者b 生产 商品:14

消费者c 消耗 商品:11 商品:14

提问:生产者生产了商品3,4,5后,消费者却按3,5的顺序消费??有人知道是为什么吗

原因:因为消费者的线程再交替进行,消费者b消耗3,消费者c消耗4

代码可优化,添加上队列是否满,是否空的判断

本文地址:https://blog.csdn.net/weixin_42784766/article/details/110928316

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值