gpt4 book ai didi

python - 我可以在不破坏线程安全的情况下读取队列中最旧元素的内容吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:54:20 25 4
gpt4 key购买 nike

从队列中删除元素取决于该元素的内容。为了访问内容,唯一建议的方法是通过 myQueue.get() 方法。

队列的内容也可以通过 myQueue.queue[0] 的方式访问。这意味着直接从底层的deque 读取内容。这意味着以这种方式读取内容并不能提供最初创建队列所要的线程安全权限。

是否有线程安全的方式来读取内容而不删除元素?

最佳答案

您可能需要调整下面所示的解决方案。如果元素满足某些条件,它允许您获取该元素。您的问题没有明确说明您希望如何处理阻塞、超时或无法找到匹配的项目。因此,以下代码是非阻塞的,并且当最旧的值与给定条件不匹配时返回默认值。请修改代码以适合您的特定使用场景。

import queue


class Queue(queue.Queue):

def get_if(self, condition, default=None):
with self.not_empty:
if not self._qsize():
raise queue.Empty
if condition(self._peek()):
item = self._get()
self.not_full.notify()
return item
return default

def _peek(self):
return self.queue[0]


def main():
my_queue = Queue()
for number in range(100, 200):
my_queue.put_nowait(number)
number = my_queue.get_if(lambda item: not item % 10)
print(number)


if __name__ == '__main__':
main()

关于python - 我可以在不破坏线程安全的情况下读取队列中最旧元素的内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35558584/

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