Crate tasque [] [src]

A simple thread pool library for Rust.

Examples

Basic usage:

use std::sync::mpsc;
use std::thread;
use std::time::Duration;
use tasque::TaskQueueBuilder;

// Creates a task queue.
// This queue spawns worker threads for executing tasks.
let queue = TaskQueueBuilder::new().worker_count(3).finish();

// Executes asynchronous tasks.
let (tx, rx) = mpsc::channel();
for (i, tx) in (0..3).map(|i| (i, tx.clone())) {
    queue.enqueue(move || {
        thread::sleep(Duration::from_millis(20 - i * 10));
        let _ = tx.send(i);
    });
}

// Waits results.
assert_eq!(rx.recv().ok(), Some(2));
assert_eq!(rx.recv().ok(), Some(1));
assert_eq!(rx.recv().ok(), Some(0));

This library exposes some prometheus metrics:

use std::time::Duration;
use prometrics::default_gatherer;
use tasque::TaskQueueBuilder;

let queue = TaskQueueBuilder::new().worker_count(1).finish();
queue.enqueue(|| panic!());
queue.enqueue(|| {});
std::thread::sleep(Duration::from_millis(100));

let metrics = default_gatherer().lock().unwrap().gather().to_text();
assert_eq!(metrics,
[
 "# HELP tasque_queue_dequeued_tasks_total Number of dequeued tasks",
 "# TYPE tasque_queue_dequeued_tasks_total counter",
 "tasque_queue_dequeued_tasks_total 2",
 "# HELP tasque_queue_enqueued_tasks_total Number of enqueued tasks",
 "# TYPE tasque_queue_enqueued_tasks_total counter",
 "tasque_queue_enqueued_tasks_total 2",
 "# HELP tasque_worker_restarts_total Number of worker restarts",
 "# TYPE tasque_worker_restarts_total counter",
 "tasque_worker_restarts_total 1",
 "# HELP tasque_worker_task_duration_seconds Execution time of tasks",
 "# TYPE tasque_worker_task_duration_seconds histogram",
 "tasque_worker_task_duration_seconds_bucket{le=\"0.001\",worker=\"0\"} 1",
 "tasque_worker_task_duration_seconds_bucket{le=\"0.01\",worker=\"0\"} 1",
 "tasque_worker_task_duration_seconds_bucket{le=\"0.1\",worker=\"0\"} 1",
 "tasque_worker_task_duration_seconds_bucket{le=\"1\",worker=\"0\"} 1",
 "tasque_worker_task_duration_seconds_bucket{le=\"10\",worker=\"0\"} 1",
 "tasque_worker_task_duration_seconds_bucket{le=\"100\",worker=\"0\"} 1",
 "tasque_worker_task_duration_seconds_bucket{le=\"+Inf\",worker=\"0\"} 1",
 "tasque_worker_task_duration_seconds_sum{worker=\"0\"} 0.000001392",
 "tasque_worker_task_duration_seconds_count{worker=\"0\"} 1"
].iter().map(|s| format!("{}\n", s)).collect::<Vec<_>>().join("")
);

Structs

TaskQueue

Task queue.

TaskQueueBuilder

TaskQueue builder.