cronoq 0.2.1

Elastic, priority-aware task scheduler: aging, deadlines, fixed starts, DAGs, retries and autoscaling
Documentation

cronoq

crates.io docs.rs

An elastic, priority-aware task scheduler for tokio applications. cronoq orders and admits work (priorities with aging, deadlines, fixed starts and cron, DAG dependencies, retries, shared rate limits) and sizes each pool's concurrency from queue pressure. Your async functions do the work.

[dependencies]
cronoq = "0.2"
use std::{sync::Arc, time::Duration};
use cronoq::{Pool, Priority, Scheduler, Task, TaskError};

# async fn demo() -> Result<(), Box<dyn std::error::Error>> {
let sched = Scheduler::<String, usize>::builder()
    .pool(Pool::new("default").workers(1, 2, 8).executor_fn(|_ctx, text: Arc<String>| async move {
        Ok::<_, TaskError>(text.len())
    }))
    .build()
    .await?;

let handle = sched
    .submit(Task::new("hello".to_string()).priority(Priority::High).deadline_in(Duration::from_secs(5)))
    .await?;
assert_eq!(*handle.await?, 5);
sched.shutdown(Duration::from_secs(5)).await?;
# Ok(()) }

Use it when you want scheduling policies (priority, deadlines, rate limits, autoscaling) inside a Rust service without running extra infrastructure. For a standalone service with remote workers, see cronoq-server; for Python, see cronoq on PyPI.

Feature otel (default) adds OpenTelemetry metrics and trace propagation. MSRV: 1.94.

Licensed under MIT or Apache-2.0, at your option.