File size: 772 Bytes
d1f3f31 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | from __future__ import annotations
import asyncio
from dataclasses import dataclass
from typing import Protocol
@dataclass(frozen=True, slots=True)
class AudioJob:
job_id: str
storage_path: str
filename: str
class JobQueue(Protocol):
async def enqueue(self, job: AudioJob) -> None:
...
async def dequeue(self) -> AudioJob:
...
def task_done(self) -> None:
...
class InMemoryJobQueue:
def __init__(self) -> None:
self._queue: asyncio.Queue[AudioJob] = asyncio.Queue()
async def enqueue(self, job: AudioJob) -> None:
await self._queue.put(job)
async def dequeue(self) -> AudioJob:
return await self._queue.get()
def task_done(self) -> None:
self._queue.task_done()
|