Files
antigravity-skills-reference/web-app/public/skills/dbos-python/references/pattern-sleep.md

1.3 KiB

title, impact, impactDescription, tags
title impact impactDescription tags
Use Durable Sleep for Delayed Execution MEDIUM Survives restarts and can span days or weeks 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):

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):

@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:

@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():

@DBOS.workflow()
async def async_delayed_task():
    await DBOS.sleep_async(60)
    await run_async_task()

Reference: Durable Sleep