32 lines
957 B
Python
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()
|