#thread-pool #future #executor #async #async-task

poolparty

futures::executor::ThreadPool futures 执行器添加了功能

10 个版本 (5 个稳定版)

2.0.1 2021 年 10 月 13 日
2.0.0 2021 年 1 月 3 日
1.0.2 2021 年 1 月 3 日
1.0.1 2020 年 11 月 29 日
0.1.2 2020 年 2 月 27 日

#916异步

每月下载量 28

MIT 许可证

10KB
134

Cargo Documentation

一个小巧的 crate,为 futures-rs 的 threadpool 执行器提供额外功能。当前的 futures::future::ThreadPool 执行器没有内置的处理 panic、手动停止池执行或将错误回传给调用者的方式。该 crate 通过这些限制(一旦 这个开放问题得到解决,它可能就会过时)。

该 crate 的用例包括

  • 如果任何在它上运行的未来遇到无法恢复的错误并返回 Err(),则停止执行未来。
  • 让调用者处理错误。
  • 根据用户请求停止线程池及其生成任务。

⚠ 这个 crate 正在被动维护。它在我的现有项目中运行得很好。然而,我将在新项目中使用 smol 作为我的 futures 执行器。smol 任务处理程序提供了相同的功能(还有更多),使这个 crate 过时。

用法

以下示例演示了失败任务的处理

async fn forever() -> Result<(),String> {
    loop {}
}

async fn fail(msg: String) -> Result<(),String> {
    Err(msg)
}

let mut pool = StoppableThreadPool::new()?;
let err = "fail_function_called".to_string();
pool.spawn(fail(err.clone()));
pool.spawn(forever());

assert_eq!(
    pool.observe().await.unwrap_err(),
    err
)

有关更多用法示例,请参阅 lib.rs 中的测试。

许可证

该项目受以下任一许可证的约束

您可任选其一。

贡献

除非您明确说明,否则任何有意提交给 poolparty 的贡献,根据 Apache-2.0 许可证的定义,都应按上述方式双许可,不附加任何额外条款或条件。

依赖关系

~5–18MB
~191K SLoC