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>
59 lines
1.3 KiB
Markdown
59 lines
1.3 KiB
Markdown
---
|
|
title: Use Durable Sleep for Delayed Execution
|
|
impact: MEDIUM
|
|
impactDescription: Survives restarts and can span days or weeks
|
|
tags: sleep, delay, schedule, durable
|
|
---
|
|
|
|
## Use Durable Sleep for Delayed Execution
|
|
|
|
Use `DBOS.sleep()` for durable delays that survive restarts. The wakeup time is persisted in the database.
|
|
|
|
**Incorrect (regular sleep):**
|
|
|
|
```python
|
|
import time
|
|
|
|
@DBOS.workflow()
|
|
def delayed_task(delay_seconds, task):
|
|
# Regular sleep is lost on restart!
|
|
time.sleep(delay_seconds)
|
|
run_task(task)
|
|
```
|
|
|
|
**Correct (durable sleep):**
|
|
|
|
```python
|
|
@DBOS.workflow()
|
|
def delayed_task(delay_seconds, task):
|
|
# Durable sleep - survives restarts
|
|
DBOS.sleep(delay_seconds)
|
|
run_task(task)
|
|
```
|
|
|
|
Use cases for durable sleep:
|
|
- Schedule a task for the future
|
|
- Wait between retries
|
|
- Implement delays spanning hours, days, or weeks
|
|
|
|
Example: Schedule a reminder:
|
|
|
|
```python
|
|
@DBOS.workflow()
|
|
def send_reminder(user_id: str, message: str, delay_days: int):
|
|
# Sleep for days - survives any restart
|
|
DBOS.sleep(delay_days * 24 * 60 * 60)
|
|
send_notification(user_id, message)
|
|
```
|
|
|
|
For async workflows, use `DBOS.sleep_async()`:
|
|
|
|
```python
|
|
@DBOS.workflow()
|
|
async def async_delayed_task():
|
|
await DBOS.sleep_async(60)
|
|
await run_async_task()
|
|
```
|
|
|
|
Reference: [Durable Sleep](https://docs.dbos.dev/python/tutorials/workflow-tutorial#durable-sleep)
|