Files
Max dml 7e5abd504f feat: add DBOS skills for TypeScript, Python, and Go (#94)
Add three DBOS SDK skills with reference documentation for building
reliable, fault-tolerant applications with durable workflows.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 23:26:51 +01:00

1.4 KiB

title, impact, impactDescription, tags
title impact impactDescription tags
Set Workflow Timeouts CRITICAL Prevents runaway workflows from consuming resources timeout, cancel, deadline, limits

Set Workflow Timeouts

Use SetWorkflowTimeout to limit workflow execution time. Timed-out workflows are cancelled.

Incorrect (no timeout):

@DBOS.workflow()
def potentially_long_workflow():
    # Could run forever!
    while not done:
        process_next()

Correct (with timeout):

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:

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