#hyperlane #format #day #language #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.

43 stable releases

Uses new Rust 2024

2.4.7 Oct 19, 2025
2.4.4 Aug 2, 2025
2.4.1 Jul 30, 2025
2.1.4 Mar 30, 2025
0.3.0 Jan 11, 2025

#1452 in Network programming

Download history 47/week @ 2025-07-09 23/week @ 2025-07-16 140/week @ 2025-07-23 570/week @ 2025-07-30 143/week @ 2025-08-06 39/week @ 2025-08-13 78/week @ 2025-08-20 24/week @ 2025-08-27 39/week @ 2025-09-03 71/week @ 2025-09-10 32/week @ 2025-09-17 22/week @ 2025-09-24 82/week @ 2025-10-01 27/week @ 2025-10-08 388/week @ 2025-10-15 87/week @ 2025-10-22

588 downloads per month
Used in 3 crates (via hyperlane-utils)

MIT license

18KB
278 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 root@ltpp.vip.

Dependencies

~4MB
~58K SLoC