feat: add async job queue

This commit is contained in:
2025-11-30 17:39:06 -05:00
parent 28382b2dfc
commit dd6b5c143a
3 changed files with 56 additions and 0 deletions

15
app/queue.py Normal file
View File

@@ -0,0 +1,15 @@
import asyncio
class JobQueue:
def __init__(self) -> None:
self._queue: asyncio.Queue[str] = asyncio.Queue()
async def enqueue(self, job_id: str) -> None:
await self._queue.put(job_id)
async def dequeue(self) -> str:
return await self._queue.get()
def size(self) -> int:
return self._queue.qsize()

View File

@@ -2,4 +2,5 @@ fastapi==0.123.0
uvicorn[standard]==0.38.0
pydantic==2.12.5
pytest==8.3.0
pytest-asyncio==0.24.0
httpx==0.28.1

40
tests/test_queue.py Normal file
View File

@@ -0,0 +1,40 @@
import pytest
import asyncio
from app.queue import JobQueue
@pytest.mark.asyncio
async def test_enqueue_and_dequeue():
queue = JobQueue()
await queue.enqueue("job_123")
job_id = await queue.dequeue()
assert job_id == "job_123"
@pytest.mark.asyncio
async def test_queue_ordering():
queue = JobQueue()
await queue.enqueue("job_1")
await queue.enqueue("job_2")
await queue.enqueue("job_3")
assert await queue.dequeue() == "job_1"
assert await queue.dequeue() == "job_2"
assert await queue.dequeue() == "job_3"
@pytest.mark.asyncio
async def test_queue_size():
queue = JobQueue()
assert queue.size() == 0
await queue.enqueue("job_1")
assert queue.size() == 1
await queue.enqueue("job_2")
assert queue.size() == 2
await queue.dequeue()
assert queue.size() == 1