从队列中删除元素取决于元素的内容。
要访问内容,唯一建议的方法是通过rescan-scsi-bus.sh
方法。
但是,也可以通过powermt display
方式访问队列的内容。这意味着直接从底层myQueue.get()
阅读内容。这意味着以这种方式读取内容并不能提供最初为该队列创建的线程安全权限。
是否有一种线程安全的方法来读取内容而不删除元素?
答案 0 :(得分:1)
您可能需要调整下面显示的解决方案。如果元素满足某些条件,它允许您获取元素。您的问题并未明确表示您希望如何处理阻止,超时或无法找到匹配的项目。因此,以下代码是非阻塞的,并在最旧的值与给定条件不匹配时返回默认值。请修改代码以适合您的特定使用场景。
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()