This commit is contained in:
2026-03-04 10:01:49 +03:00
commit de787ce7ee
107 changed files with 2801 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
from app_runtime.queue.in_memory import InMemoryTaskQueue
__all__ = ["InMemoryTaskQueue"]
+43
View File
@@ -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(),
}