Files
antigravity-skills-reference/web-app/public/skills/dbos-python/references/workflow-timeout.md

60 lines
1.4 KiB
Markdown

---
title: Set Workflow Timeouts
impact: CRITICAL
impactDescription: Prevents runaway workflows from consuming resources
tags: timeout, cancel, deadline, limits
---
## Set Workflow Timeouts
Use `SetWorkflowTimeout` to limit workflow execution time. Timed-out workflows are cancelled.
**Incorrect (no timeout):**
```python
@DBOS.workflow()
def potentially_long_workflow():
# Could run forever!
while not done:
process_next()
```
**Correct (with timeout):**
```python
from dbos import SetWorkflowTimeout
@DBOS.workflow()
def bounded_workflow():
while not done:
process_next()
# Workflow must complete within 60 seconds
with SetWorkflowTimeout(60):
bounded_workflow()
# Or with start_workflow
with SetWorkflowTimeout(60):
handle = DBOS.start_workflow(bounded_workflow)
```
Timeout behavior:
- Timeout is **start-to-completion** (doesn't count queue wait time)
- Timeouts are **durable** (persist across restarts)
- Cancellation happens at the **beginning of the next step**
- **All child workflows** are also cancelled
With queues:
```python
queue = Queue("example_queue")
# Timeout starts when dequeued, not when enqueued
with SetWorkflowTimeout(30):
queue.enqueue(my_workflow)
```
Timeouts work with long durations (hours, days, weeks) since they're stored in the database.
Reference: [Workflow Timeouts](https://docs.dbos.dev/python/tutorials/workflow-tutorial#workflow-timeouts)