设计模式-注册表模式

用字典(键: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
相关推荐
电子科技圈3 小时前
先进封装、芯粒架构和3D集成——先进异构集成亟需兼具标准化与定制化能力的互联及总线IP解决方案
tcp/ip·设计模式·架构·软件构建·代码规范·设计规范
zjun10015 小时前
C++:2.工厂模式
设计模式
触底反弹6 小时前
🤯 面试被问 AI Workflow 和 Agent 有啥区别?3 张图 + 2 段代码讲清楚!
人工智能·设计模式·面试
杨充1 天前
10.可测试性实战设计
设计模式·开源·代码规范
杨充1 天前
9.重构十二式的实战
设计模式·开源·代码规范
杨充1 天前
6.设计原则的全景图
设计模式·开源·全栈
杨充1 天前
2.面向对象的特性
设计模式
杨充1 天前
7.SOLID原则案例汇
设计模式·开源·全栈
杨充1 天前
8.反模式与坏味道
设计模式·开源·代码规范
杨充1 天前
3.接口vs抽象类比较
设计模式