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
|
uvicorn[standard]==0.38.0
|
||||||
pydantic==2.12.5
|
pydantic==2.12.5
|
||||||
pytest==8.3.0
|
pytest==8.3.0
|
||||||
|
pytest-asyncio==0.24.0
|
||||||
httpx==0.28.1
|
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