用字典(键:task_id,值:asyncio.Task 对象)维护 "活跃轮询任务" 的映射关系,实现 "任务注册 - 查询 - 注销"
用**信号量(Semaphore)**限制并发数
python
async with self.semaphore:
while True:
if datetime.now() - start_time > timedelta(seconds=self.task_timeout):
task = await TranscriptionTask.get_by_id(self.db, task_id)
if task:
await task.mark_as_completed(
self.db,
result_text=f"任务超时 (超过{self.task_timeout}秒)",
task_status="FAILED"
)
break
transcribe_response = Transcription.fetch(task=asr_task_id)
task_status = transcribe_response.output.task_status
if task_status != last_status:
last_status = task_status
if task_status == 'PENDING':
current_interval = await self._handle_pending_status(task_id, current_interval)
await asyncio.sleep(current_interval)
elif task_status == 'RUNNING':
current_interval = await self._handle_running_status(task_id, current_interval)
await asyncio.sleep(current_interval)
elif task_status == 'SUCCEEDED':
results = transcribe_response.output.results[0] if transcribe_response.output.results else None
if await self._handle_succeeded_status(task_id, asr_task_id, local_file_path, results):
break