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>
60 lines
1.6 KiB
Markdown
60 lines
1.6 KiB
Markdown
---
|
|
title: Debounce Workflows to Prevent Wasted Work
|
|
impact: MEDIUM
|
|
impactDescription: Reduces redundant executions during rapid input
|
|
tags: 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):**
|
|
|
|
```python
|
|
@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):**
|
|
|
|
```python
|
|
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):
|
|
|
|
```python
|
|
# 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](https://docs.dbos.dev/python/tutorials/workflow-tutorial#debouncing-workflows)
|