From 3c8cc18c8c00f2693dd7e3e40a1a25efc5f80e58 Mon Sep 17 00:00:00 2001 From: panos-gkonis Date: Fri, 30 May 2025 15:45:04 +0200 Subject: [PATCH] Avoid calling graph.in_cycle() if possible --- orquesta/conducting.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/orquesta/conducting.py b/orquesta/conducting.py index a5441c25..04a0650f 100644 --- a/orquesta/conducting.py +++ b/orquesta/conducting.py @@ -1107,9 +1107,8 @@ def _evaluate_route(self, task_transition, prev_route): ) is_split_task = self.spec.tasks.is_split_task(task_id) - is_in_cycle = self.graph.in_cycle(task_id) - if not is_split_task or is_in_cycle: + if not is_split_task: return prev_route old_route_details = self.workflow_state.routes[prev_route] @@ -1121,6 +1120,11 @@ def _evaluate_route(self, task_transition, prev_route): if old_route_details == new_route_details: return prev_route + # The following is very computationally expensive; defer it as much as possible. + is_in_cycle = self.graph.in_cycle(task_id) + if is_in_cycle: + return prev_route + self.workflow_state.routes.append(new_route_details) return len(self.workflow_state.routes) - 1