feat: add async job queue
This commit is contained in:
15
app/queue.py
Normal file
15
app/queue.py
Normal 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()
|
||||
@@ -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
40
tests/test_queue.py
Normal 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
|
||||
Reference in New Issue
Block a user