# Parallel nodes without a branch

**URL:** <https://forum.langchain.com/t/parallel-nodes-without-a-branch/2101>\
**Category:** LangGraph\
**Tags:** python-help\
**Created:** [November 5, 2025, 1:43pm UTC](https://forum.langchain.com/t/parallel-nodes-without-a-branch/2101 "2025-11-05T13:43:42Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Cgrdj](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/cgrdj/32/1170_2.png) [@Cgrdj](https://forum.langchain.com/u/Cgrdj)\
**Post date:** [November 5, 2025, 1:43pm UTC](https://forum.langchain.com/t/parallel-nodes-without-a-branch/2101/1 "2025-11-05T13:43:42Z")

</div>

Hello,

I got a workflow with the following logic:

- Node 1 makes an action and depending on the result may trigger Node 2,Node 3,Node 4 and wi
- Node 2,Node 3 launch subgraph async tasks and should not do anything after that simply end do not go back into the graph

-Node 4 does another action that may retrigger Node 1

My question is should i route Node 2 and Node 3 to END ?  
I m actually currently debugging it and im left under the impression this ends the whole graph .Ending should only be decided in Node 4.  
Not sure about that .

Thanks !

---

<div class="post-metadata">

**Author:** ![pawel-twardziak](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/pawel-twardziak/32/960_2.png) [@pawel-twardziak](https://forum.langchain.com/u/pawel-twardziak)\
**Post date:** [November 5, 2025, 7:19pm UTC](https://forum.langchain.com/t/parallel-nodes-without-a-branch/2101/2 "2025-11-05T19:19:40Z")

</div>

Hi @Cgrdj

**CAUTION** : this is my hypothetical answer based on theory 🙂 If you shared your code, I would say more accurately regarding the issue you are facing.

* * *

Route Node 2 and Node 3 to `END` (or give them no outgoing edges). This ends only those branches. The overall graph finishes only when there are no runnable tasks left. Node 4 can continue independently and re-trigger Node 1 as designed.

- **What `END` means:** `END` is a special sink node. Adding an edge to `END` means “no further scheduling for this branch.” The run completes when there are no pending Sends and no nodes triggered by channel updates - i.e., when all active branches have finished.

- **Parallel branches:** If Node 1 fans out to Node 2, Node 3, and Node 4 (via conditional edges or returning multiple `Send(...)` packets), those branches execute independently. Routing Node 2/3 to `END` won’t cancel Node 4.

- **Looping control:** If Node 4 may loop back to Node 1, give Node 4 an edge to `Node 1` (or a conditional mapping that sometimes returns `Node 1` and sometimes `END`). Termination is then decided by Node 4’s path (and any other still-active branches), not by Node 2/3.

**Example**

```python

from langgraph.graph import StateGraph, START, END

builder = StateGraph(State)

builder.add_node("node1", node1)
builder.add_node("node2", node2)
builder.add_node("node3", node3)
builder.add_node("node4", node4)
# Node 1 can fan out to multiple nodes
builder.add_conditional_edges("node1", route, ["node2", "node3", "node4"]) # or return [Send(...), ...]

# Node 2 and Node 3 should finish their branches
builder.add_edge("node2", END)
builder.add_edge("node3", END)
# Node 4 may loop back to Node 1
builder.add_edge("node4", "node1")

```

##### If your run appears to “end early”

- Ensure Node 1 really fans out (e.g., returns multiple `Send(...)` or a conditional mapping to multiple next nodes).

- Verify Node 4’s logic doesn’t map to `END` in the case you’re testing.

- Confirm Node 2/3 aren’t the only triggered branches (i.e., that Node 4 was actually scheduled in that step).
