Files
PVideoDl/app/core/queue.py
T

32 lines
957 B
Python

"""Абстракция очереди задач.
Сегодня — обёртка над asyncio.Queue. Завтра можно подменить на Redis/RabbitMQ,
не трогая вызовы в сервисах: интерфейс DownloadQueue остаётся прежним.
"""
from __future__ import annotations
import asyncio
class DownloadQueue:
"""Очередь идентификаторов загрузок, ожидающих обработки воркерами."""
def __init__(self) -> None:
self._queue: asyncio.Queue[str] = asyncio.Queue()
async def add(self, download_id: str) -> None:
await self._queue.put(download_id)
async def get(self) -> str:
return await self._queue.get()
def task_done(self) -> None:
self._queue.task_done()
async def join(self) -> None:
await self._queue.join()
def qsize(self) -> int:
return self._queue.qsize()