gpt4 book ai didi

python - Python的queue.Queue get/put方法在阻塞时是否持有该队列的锁?

转载 作者:行者123 更新时间:2023-12-01 02:02:40 25 4
gpt4 key购买 nike

我有一个传统的多线程生产者/消费者模式,其 queue.Queue之间。队列的这种实现是线程安全的。消费者可以通过两种方式消费数据:

阻止

while self.running:
data = self.receiver_q.get(block=True)
# do something with data

非阻塞

while self.running:
try:
data = self.receiver_q.get(block=False)
except queue.Empty:
continue
# do something with data

在阻塞方法中,消费者等待,直到队列中有数据。这段时间消费者是否持有队列的锁?我无法想象一种方法可以让它在保持锁定的同时允许队列放置新数据。

此外,这两种模式之间是否存在性能差异?

最佳答案

(1) 不,消费者没有持有锁;它只是被阻塞,直到请求得到满足,但队列仍然可用。如果有多个消费者,那么这个消费者就在潜在接收者池中;解析函数将选择满意的顺序。

(2) 任何性能差异都取决于实现。不要问我们——您面前拥有最重要的权威:您的计算机。使用您选择的测试场景和 timeit 工具。

关于python - Python的queue.Queue get/put方法在阻塞时是否持有该队列的锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49438246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com