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>
This commit is contained in:
59
skills/dbos-python/references/pattern-debouncing.md
Normal file
59
skills/dbos-python/references/pattern-debouncing.md
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
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)
|
||||
Reference in New Issue
Block a user