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