Skip to content

Queue Configuration

RestQ provides both synchronous and asynchronous queue implementations to suit different application needs.

Queue Types

Synchronous Queue

The standard Queue class is perfect for synchronous applications or scripts:

from restq import Queue

queue = Queue(
    name="my-queue",
    url="redis://localhost:6379/0"
)

Asynchronous Queue

The AsyncQueue class is designed for async applications:

from restq import AsyncQueue

async_queue = AsyncQueue(
    name="my-queue",
    url="redis://localhost:6379/0"
)

# Usage in async context
await async_queue.add(
    task_name="my_task",
    kwargs={"key": "value"}
)

Configuration Options

Queue Parameters

Parameter Type Required Description
name str Yes Unique identifier for your queue
url str Yes Redis connection URL

Redis URL Format

The Redis URL follows this format:

redis://[[username]:[password]]@localhost:6379/0

Components: - username: Redis username (optional) - password: Redis password (optional) - localhost: Redis host - 6379: Redis port - 0: Database number

Adding Tasks

The add method is your primary interface for enqueueing tasks:

queue.add(
    task_name="my_task",           # Required: Name of the task
    kwargs={"key": "value"},       # Optional: Task arguments
    mode="json",                   # Optional: Serialization mode
    delay=None                     # Optional: Delay in seconds
)

Task Addition Parameters

Parameter Type Required Default Description
task_name str Yes - Name of the task to execute
kwargs dict No None Task arguments
mode str No "json" Serialization mode ("json" or "pickle")
delay int/float/timedelta No None Delay before execution

Delayed Tasks

RestQ supports delayed task execution in multiple formats:

# Delay by seconds
queue.add(task_name="my_task", delay=60)

# Delay using timedelta
from datetime import timedelta
queue.add(task_name="my_task", delay=timedelta(minutes=5))

Best Practices

  1. Queue Naming:
  2. Use descriptive, unique names
  3. Consider prefixing for different environments
  4. Example: "prod-email-notifications"

  5. Redis Connection:

  6. Use connection pooling for production
  7. Consider Redis cluster for high availability
  8. Monitor Redis memory usage

  9. Task Arguments:

  10. Keep task data small and serializable
  11. Use JSON mode when possible
  12. Avoid sending large payloads

  13. Error Handling:

    try:
        queue.add(task_name="my_task", kwargs={"key": "value"})
    except Exception as e:
        logger.error(f"Failed to enqueue task: {e}")
    

Example Configurations

Basic Queue

queue = Queue(
    name="simple-queue",
    url="redis://localhost:6379/0"
)

Production Queue

queue = Queue(
    name="prod-background-tasks",
    url="redis://user:pass@prod.redis:6379/0"
)

Development Queue

```python queue = Queue( name="dev-tasks", url="redis://localhost:6379/1" # Using different database )