plba
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
from app_runtime.queue.in_memory import InMemoryTaskQueue
|
||||
|
||||
__all__ = ["InMemoryTaskQueue"]
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,43 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from queue import Empty, Queue
|
||||
|
||||
from app_runtime.contracts.queue import TaskQueue
|
||||
from app_runtime.contracts.tasks import Task
|
||||
|
||||
|
||||
class InMemoryTaskQueue(TaskQueue):
|
||||
def __init__(self) -> None:
|
||||
self._queue: Queue[Task] = Queue()
|
||||
self._published = 0
|
||||
self._acked = 0
|
||||
self._nacked = 0
|
||||
|
||||
def publish(self, task: Task) -> None:
|
||||
self._published += 1
|
||||
self._queue.put(task)
|
||||
|
||||
def consume(self, timeout: float = 0.1) -> Task | None:
|
||||
try:
|
||||
return self._queue.get(timeout=timeout)
|
||||
except Empty:
|
||||
return None
|
||||
|
||||
def ack(self, task: Task) -> None:
|
||||
del task
|
||||
self._acked += 1
|
||||
self._queue.task_done()
|
||||
|
||||
def nack(self, task: Task, retry_delay: float | None = None) -> None:
|
||||
del retry_delay
|
||||
self._nacked += 1
|
||||
self._queue.put(task)
|
||||
self._queue.task_done()
|
||||
|
||||
def stats(self) -> dict[str, int]:
|
||||
return {
|
||||
"published": self._published,
|
||||
"acked": self._acked,
|
||||
"nacked": self._nacked,
|
||||
"queued": self._queue.qsize(),
|
||||
}
|
||||
Reference in New Issue
Block a user