设计模式-注册表模式

用字典(键: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
相关推荐
桦说编程5 小时前
Guava Forwarding系列类详解——装饰器模式实战
java·后端·设计模式
How_doyou_do10 小时前
常见的设计模式
前端·javascript·设计模式
alibli10 小时前
深度理解设计模式——概述,SOLID原则
设计模式
AM越.13 小时前
Java设计模式超详解--观察者设计模式
java·开发语言·设计模式
ezreal_pan13 小时前
基于券类型路由的渐进式重构:函数式选项模式与管道模式的完美结合
设计模式·重构·golang·选项函数
有一个好名字13 小时前
设计模式-单例模式
java·单例模式·设计模式
赵得C14 小时前
2025下半年软件设计师考前几页纸
java·开发语言·分布式·设计模式·性能优化·软考·软件设计师
alibli15 小时前
Alibli深度理解设计模式系列教程
c++·设计模式
老朱佩琪!15 小时前
Unity迭代器模式
unity·设计模式·迭代器模式