| Crates.io | simple-delay-queue |
| lib.rs | simple-delay-queue |
| version | 0.1.3 |
| created_at | 2025-03-23 20:04:37.035407+00 |
| updated_at | 2025-04-01 19:08:02.41989+00 |
| description | A simple delay queue for Tokio |
| homepage | |
| repository | https://github.com/Bben01/simple-delay-queue |
| max_upload_size | |
| id | 1602995 |
| size | 52,733 |
A lightweight and efficient time-based queue implementation for Tokio that delays yielding inserted elements until a fixed timeout has elapsed.
TimeQueue provides a simple, performant queue that yields elements in FIFO order after a fixed timeout has elapsed. Unlike more complex delay queues, TimeQueue focuses on efficiency with O(1) push and pop operations by enforcing a constant timeout for all elements.
Add this to your Cargo.toml:
[dependencies]
time_queue = "0.1.0"
tokio = { version = "1", features = ["full"] }
use std::time::Duration;
use simple_delay_queue::TimeQueue;
use futures_util::StreamExt;
#[tokio::main]
async fn main() {
// Create a TimeQueue with a 500ms timeout
let mut queue = TimeQueue::new(Duration::from_millis(500));
// Add elements to the queue
queue.push("first");
queue.push("second");
queue.push("third");
// Elements will become available after their timeout
while let Some(item) = queue.next().await {
println!("Got item: {}", item);
}
}
TimeQueue is ideal for:
tokio::time::DelayQueueTimeQueue is designed to be simpler and faster than tokio::time::DelayQueue for specific use cases:
| Feature | TimeQueue | DelayQueue |
|---|---|---|
| Timeout Configuration | Fixed for all elements | Configurable per element |
| Order Guarantee | FIFO | Based on expiration time |
| Performance | O(1) push/pop | O(log n) |
| Reset Timeouts | No | Yes |
| Remove Elements | No | Yes |
| Use Case | Simple, efficient delay queue | Feature-rich priority queue |