#pool #async-pool #generic #sync #instance #created

apool

为 Rust 设计的异步泛型池库

4 个版本

0.1.3 2021 年 8 月 22 日
0.1.2 2021 年 8 月 22 日
0.1.1 2021 年 8 月 21 日
0.1.0 2021 年 8 月 21 日

#24#async-pool

Apache-2.0 协议

9KB
181 行代码(不含注释)

apool

本库允许您懒加载地创建任何类型的 T: Send + Sync 池。

  • 当尝试获取 &mut T
  • 如果没有创建实例,将创建一个新的实例,
  • 如果所有实例都在使用中,将创建一个新的实例,

除非达到指定的池最大值,否则任务将等待一个实例变得可用。

使用方法

let pool = Pool::<FakeDatabase, &'static str>::new(
    4,
    "fakedb://127.0.0.1:1337/fake_website",
    |state, transformer| {
        let url = *state;
        transformer.spawn(async {
            FakeDatabase::connect(url).await.unwrap()
        });
    },
);

let guard = pool.get().await;
guard.commit_data().await;

依赖关系

~2–3MB
~48K SLoC