#thread-pool #hyperlane #day #language #format #networking #time

recoverable-thread-pool

A thread pool that supports automatic recovery from panics, allowing threads to restart after a panic. Useful for resilient and fault-tolerant concurrency in network and web programming.

23 releases (stable)

Uses new Rust 2024

new 2.1.0 Mar 21, 2025
2.0.11 Mar 11, 2025
2.0.8 Feb 9, 2025
2.0.7 Jan 21, 2025
0.0.3 Jan 10, 2025

#5 in #lang

Download history 710/week @ 2025-01-09 994/week @ 2025-01-16 31/week @ 2025-01-23 39/week @ 2025-01-30 255/week @ 2025-02-06 227/week @ 2025-02-13 141/week @ 2025-02-20 507/week @ 2025-02-27 300/week @ 2025-03-06 338/week @ 2025-03-13

1,309 downloads per month
Used in 5 crates (3 directly)

MIT license

14KB
253 lines

recoverable-thread-pool

Official Documentation

Api Docs

A thread pool that supports automatic recovery from panics, allowing threads to restart after a panic. Useful for resilient and fault-tolerant concurrency in network and web programming.

Installation

To use this crate, you can run cmd:

cargo add recoverable-thread-pool

Use

Sync

use recoverable_thread_pool::*;
use std::{thread::sleep, time::Duration};
let thread_pool: ThreadPool = ThreadPool::new(1);
let first_res: SendResult = thread_pool.execute(|| {
    println!("first");
});
println!("{:?}", first_res);
let panic_res: SendResult = thread_pool.execute_with_catch(
    || {
        panic!("[panic]");
    },
    |err| {
        println!("Catch panic {}", err);
    },
);
println!("{:?}", panic_res);
let second_res: SendResult = thread_pool.execute_with_catch_finally(
    || {
        panic!("[panic]");
    },
    |_err| {
        panic!("[panic]");
    },
    || {
        println!("finally");
    },
);
println!("{:?}", second_res);
sleep(Duration::from_secs(10));

Async

use recoverable_thread_pool::*;
use std::{thread::sleep, time::Duration};
let thread_pool: ThreadPool = ThreadPool::new(1);
let first_res: SendResult = thread_pool.async_execute(|| async {
    println!("first");
});
println!("{:?}", first_res);
let panic_res: SendResult = thread_pool.async_execute_with_catch(
    || async {
        panic!("[panic]");
    },
    |err| async move {
        println!("Catch panic {}", err);
    },
);
println!("{:?}", panic_res);
let second_res: SendResult = thread_pool.async_execute_with_catch_finally(
    || async {
        panic!("[panic]");
    },
    |_err| async {
        panic!("[panic]");
    },
    || async {
        println!("finally");
    },
);
println!("{:?}", second_res);
sleep(Duration::from_secs(10));

License

This project is licensed under the MIT License. See the LICENSE file for details.

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

Contact

For any inquiries, please reach out to the author at ltpp-universe root@ltpp.vip.

Dependencies

~2.6–9MB
~74K SLoC