From 232fe4d15e030566b0786525b7c297a1bc72320b Mon Sep 17 00:00:00 2001 From: jxxghp Date: Wed, 23 Jul 2025 17:03:50 +0800 Subject: [PATCH] fix dead lock --- app/api/endpoints/workflow.py | 1 - app/core/workflow.py | 19 +++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/app/api/endpoints/workflow.py b/app/api/endpoints/workflow.py index 47425c2e..08282d28 100644 --- a/app/api/endpoints/workflow.py +++ b/app/api/endpoints/workflow.py @@ -217,7 +217,6 @@ def pause_workflow(workflow_id: int, """ 停用工作流 """ - from app.db.workflow_oper import WorkflowOper workflow = WorkflowOper(db).get(workflow_id) if not workflow: return schemas.Response(success=False, message="工作流不存在") diff --git a/app/core/workflow.py b/app/core/workflow.py index de7531c0..54473f42 100644 --- a/app/core/workflow.py +++ b/app/core/workflow.py @@ -133,14 +133,13 @@ class WorkFlowManager(metaclass=Singleton): else: workflows = WorkflowOper().get_event_triggered_workflows() try: - with self._lock: - for workflow in workflows: - # 确保先移除旧的事件监听器 - self.remove_workflow_event(workflow_id=workflow.id, event_type_str=workflow.event_type) - # 如果工作流是事件触发类型且未被禁用 - if workflow.trigger_type == "event" and workflow.state != 'P': - # 注册事件触发器 - self.register_workflow_event(workflow.id, workflow.event_type) + for workflow in workflows: + # 确保先移除旧的事件监听器 + self.remove_workflow_event(workflow_id=workflow.id, event_type_str=workflow.event_type) + # 如果工作流是事件触发类型且未被禁用 + if workflow.trigger_type == "event" and workflow.state != 'P': + # 注册事件触发器 + self.register_workflow_event(workflow.id, workflow.event_type) except Exception as e: logger.error(f"加载事件触发工作流失败: {e}") @@ -154,9 +153,9 @@ class WorkFlowManager(metaclass=Singleton): logger.error(f"无效的事件类型: {event_type_str}") return if event_type in EventType: + # 确保先移除旧的事件监听器 + self.remove_workflow_event(workflow_id, event_type.value) with self._lock: - # 确保先移除旧的事件监听器 - self.remove_workflow_event(workflow_id, event_type.value) # 添加新的事件监听器 eventmanager.add_event_listener(event_type, self._handle_event) # 记录工作流事件触发器