Skip to main content

Overview

The CronJob class wraps any callable (including Swarms agents) and turns it into a scheduled job that runs at specified intervals. It provides robust scheduling, error handling, retry logic, and execution tracking with optional callback support for output customization.

Constructor

Create a CronJob instance to schedule recurring agent executions.

Parameters

Union[Any, Callable]
default:"None"
The Swarms Agent instance or callable to be scheduled
str
default:"None"
The interval string (e.g., “5seconds”, “10minutes”, “1hour”)
str
default:"None"
Optional unique identifier for the job. If not provided, one will be generated.
Callable[[Any, str, dict], Any]
default:"None"
Optional callback function to customize output processing.Signature: callback(output: Any, task: str, metadata: dict) -> Any
  • output: The original output from the agent
  • task: The task that was executed
  • metadata: Dictionary containing job_id, timestamp, execution_count, etc.
  • Returns: The customized output

Attributes

str
Unique identifier for the job
bool
Flag indicating if the job is currently running
int
Number of times the job has been executed
float
Timestamp when the job was started

Methods

run

Schedule and run the job with a specified task.
str
required
The task string to be executed by the agent
Any
Additional parameters to pass to the agent’s run method (e.g., img, imgs, correct_answer, streaming_callback)
Raises:
  • CronJobConfigError: If agent or interval is not configured
  • CronJobExecutionError: If task execution fails
Behavior:
  • Schedules the task according to the configured interval
  • Starts the background execution thread
  • Blocks until KeyboardInterrupt (Ctrl+C) is received
  • Automatically stops on interrupt

batched_run

Run multiple tasks sequentially with the same schedule.
List[str]
required
List of task strings to execute
Any
Additional parameters to pass to the agent’s run method
List[Any]
List of results from each task execution

start

Manually start the scheduled job.
Raises:
  • CronJobExecutionError: If the job fails to start
Behavior:
  • Creates a daemon thread for job execution
  • Sets is_running to True
  • Records start_time
  • If already running, logs a warning

stop

Stop the scheduled job.
Raises:
  • CronJobExecutionError: If the job fails to stop properly
Behavior:
  • Sets is_running to False
  • Waits up to 5 seconds for thread to terminate
  • Clears the schedule
  • Logs warning if thread doesn’t terminate gracefully

set_callback

Set or update the callback function for output customization.
Callable[[Any, str, dict], Any]
required
Callback function with signature: callback(output, task, metadata) -> Any

get_execution_stats

Get execution statistics for the cron job.
dict
Dictionary containing:
  • job_id: Job identifier
  • is_running: Current running status
  • execution_count: Number of executions
  • start_time: Start timestamp
  • uptime: Time elapsed since start (seconds)
  • interval: Configured interval string

Interval Formats

The interval parameter accepts strings in the format <number><unit>:

Supported Units

  • Seconds: "5seconds", "30second"
  • Minutes: "10minutes", "1minute"
  • Hours: "2hours", "1hour"

Examples

Complete Examples

Basic Scheduled Analysis

Multi-Stock Analysis with Batching

Custom Callback for Output Processing

Image Analysis with Scheduling

Monitoring Execution Stats

Exception Handling

The CronJob class defines several custom exceptions:

CronJobError

Base exception class for all CronJob errors.

CronJobConfigError

Raised for configuration errors.

CronJobScheduleError

Raised for scheduling related errors.

CronJobExecutionError

Raised for execution related errors.

Best Practices

  1. Use descriptive job IDs: Make job identifiers meaningful for tracking
  2. Set appropriate intervals: Choose intervals based on task complexity and resource availability
  3. Implement callbacks: Use callbacks for logging, saving results, or sending notifications
  4. Monitor execution stats: Regularly check stats to ensure jobs are running as expected
  5. Handle interrupts: Always wrap run() in try-except to handle KeyboardInterrupt
  6. Consider agent limits: Ensure your agent’s max_loops is appropriate for scheduled tasks
  7. Log failures: Enable verbose mode and implement proper error logging
  8. Test intervals: Start with longer intervals and optimize based on performance
  9. Resource management: Be mindful of API rate limits and costs with frequent scheduling
  10. Graceful shutdown: Always call stop() when terminating scheduled jobs

Thread Safety

CronJob uses threading for background execution:
  • Daemon threads are used to prevent blocking program exit
  • Thread-safe scheduling with the schedule library
  • Proper cleanup on stop() with timeout handling

Callback Metadata

The callback function receives a metadata dictionary with:
Use this metadata for:
  • Logging execution history
  • Conditional processing based on execution count
  • Time-based analysis
  • Debugging and monitoring