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.6 KiB

title, impact, impactDescription, tags
title impact impactDescription tags
Debounce Workflows to Prevent Wasted Work MEDIUM Reduces redundant executions during rapid input debounce, throttle, input, optimization

Debounce Workflows to Prevent Wasted Work

Debouncing delays workflow execution until some time has passed since the last trigger. Useful for user input processing.

Incorrect (processing every input):

@DBOS.workflow()
def process_input(user_input):
    # Expensive processing
    analyze(user_input)

@app.post("/input")
def on_input(user_id: str, input: str):
    # Every keystroke triggers processing!
    DBOS.start_workflow(process_input, input)

Correct (debounced processing):

from dbos import Debouncer

@DBOS.workflow()
def process_input(user_input):
    analyze(user_input)

# Create a debouncer for the workflow
debouncer = Debouncer.create(process_input)

@app.post("/input")
def on_input(user_id: str, input: str):
    # Wait 5 seconds after last input before processing
    debounce_key = user_id  # Debounce per user
    debounce_period = 5.0   # Seconds
    handle = debouncer.debounce(debounce_key, debounce_period, input)
    return {"workflow_id": handle.get_workflow_id()}

Debouncer with timeout (max wait time):

# Process after 5s idle OR 60s max wait
debouncer = Debouncer.create(process_input, debounce_timeout_sec=60)

def on_input(user_id: str, input: str):
    debouncer.debounce(user_id, 5.0, input)

When workflow executes, it uses the last inputs passed to debounce.

Reference: Debouncing Workflows