Source code for jacinle.storage.unsafe_queue

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File   : unsafe_queue.py
# Author : Jiayuan Mao
# Email  : maojiayuan@gmail.com
# Date   : 08/17/2024
#
# This file is part of Project Concepts.
# Distributed under terms of the MIT license.

import collections
import heapq
import itertools


[docs] class Queue(object): """A simple queue implementation based on collections.deque."""
[docs] def __init__(self): self._queue = collections.deque()
@property def size(self): return len(self._queue) @property def queue(self) -> collections.deque: return self._queue
[docs] def put(self, item): self._queue.append(item)
[docs] def get(self): return self._queue.popleft()
[docs] def peek(self): return self._queue[0]
[docs] def empty(self): return len(self._queue) == 0
PRIORITY_QUEUE_ITEM_COUNTER = itertools.count()
[docs] class PriorityQueue(object): """A simple priority queue implementation based on heapq."""
[docs] def __init__(self): self._queue = []
[docs] def put(self, item, priority): heapq.heappush(self._queue, (priority, next(PRIORITY_QUEUE_ITEM_COUNTER), item))
[docs] def get(self): return heapq.heappop(self._queue)[2]
[docs] def peek(self): return self._queue[0][2]
[docs] def empty(self): return len(self._queue) == 0