Wait, is this peak ?
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import _thread
|
||||
|
||||
class SafeQueue:
|
||||
"""A lightweight, thread-safe FIFO queue for MicroPython."""
|
||||
def __init__(self, maxsize=20):
|
||||
self._queue = []
|
||||
self._lock = _thread.allocate_lock()
|
||||
self.maxsize = maxsize
|
||||
|
||||
def put(self, item) -> bool:
|
||||
"""Push an item to the end of the queue. Returns False if queue is full."""
|
||||
with self._lock:
|
||||
if len(self._queue) < self.maxsize:
|
||||
self._queue.append(item)
|
||||
return True
|
||||
else:
|
||||
print("[Queue Warning] Buffer full, dropping oldest message.")
|
||||
self._queue.pop(0) # Drop oldest to make room
|
||||
self._queue.append(item)
|
||||
return False
|
||||
|
||||
def get(self):
|
||||
"""Pop and return the oldest item from the queue, or None if empty."""
|
||||
with self._lock:
|
||||
if self._queue:
|
||||
return self._queue.pop(0)
|
||||
return None
|
||||
|
||||
def empty(self) -> bool:
|
||||
"""Check if the queue has no items."""
|
||||
with self._lock:
|
||||
return len(self._queue) == 0
|
||||
|
||||
def size(self) -> int:
|
||||
"""Return current number of queued items."""
|
||||
with self._lock:
|
||||
return len(self._queue)
|
||||
Reference in New Issue
Block a user