设计模式-注册表模式

用字典(键: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
相关推荐
HL_风神13 小时前
设计原则之迪米特
c++·学习·设计模式
HL_风神13 小时前
设计原则之合成复用
c++·学习·设计模式
Aeside116 小时前
揭秘 Nginx 百万并发基石:Reactor 架构与 Epoll 底层原理
后端·设计模式
帅气的你17 小时前
从零封装一个通用的 API 接口返回类:统一前后端交互格式
java·设计模式
阿里巴巴淘系技术团队官网博客17 小时前
GenAI输出内容控制的5种设计模式
设计模式
沛沛老爹19 小时前
Skills高级设计模式(一):向导式工作流与模板生成
java·人工智能·设计模式·prompt·aigc·agent·web转型
__万波__21 小时前
二十三种设计模式(二十二)--策略模式
java·设计模式·策略模式
Overt0p1 天前
抽奖系统(6)
java·spring boot·redis·设计模式·rabbitmq·状态模式
__万波__1 天前
二十三种设计模式(二十三)--责任链模式
java·设计模式·责任链模式
帅次1 天前
系统设计方法论全解:原则、模型与用户体验核心要义
设计模式·流程图·软件工程·软件构建·需求分析·设计规范·规格说明书