#thread-pool #async #cpu-task

futures-cputask

Turn synchronous CPU-bound tasks into futures

2 releases

0.3.0 Nov 7, 2019
0.3.0-alpha.19 Oct 22, 2019

#1434 in Asynchronous

MIT/Apache

11KB
155 lines

futures-cputask

This library allows you to run long-running CPU-bound tasks on a secondary thread pool and receive a future you can await on.

Features

  • Uses Futures 0.3.0

  • For Async/Await

  • Runs tasks on a secondary threadpool to avoid blocking one of the main executor threads

  • Supports the threadpool from threadpool and uvth using their respective cargo feature

  • Has traits for allowing interoperability with other threadpool implementations

  • Contains an optional custom attribute async_task to turn a regular function into an async function using this crate

    (Note: currently this feature only works with the threadpool and uvth threadpools)

Usage

Add this to your Cargo.toml:

futures-cputask = "0.3.0"

if you want to use the custom attribute, add this:

[dependencies.futures-cputask]
version = "0.3.0"
features = ["derive"]

Example

use futures_cputask::async_task;

#[async_task]
fn long_running_task() -> i64 {
    (0..100_000_000).fold(0i64, |a, b| a.wrapping_add(b))
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1.8–2.6MB
~45K SLoC