Crates.io | fast_pool |
lib.rs | fast_pool |
version | 0.2.0 |
source | src |
created_at | 2023-12-26 08:10:32.812148 |
updated_at | 2023-12-28 17:25:43.720577 |
description | The Fast Pool based on channel |
homepage | https://github.com/rbatis/fast_pool |
repository | https://github.com/rbatis/fast_pool |
max_upload_size | |
id | 1080717 |
size | 31,874 |
a fast async pool based on channel
get()
,get_timeout()
,state()
methods//windows:
//---- bench_pool stdout ----
//use Time: 4.0313ms ,each:40 ns/op
//use QPS: 24749412 QPS/s
//macos:
//---- bench_pool stdout ----
// use Time: 6.373708ms ,each:63 ns/op
// use QPS: 15683710 QPS/s
fast_pool="0.1"
async-trait = "0.1"
tokio = {version = "1",features = ["time","rt-multi-thread","macros"]}
use std::ops::{DerefMut};
use std::time::Duration;
use async_trait::async_trait;
use fast_pool::{Manager, Pool};
#[derive(Debug)]
pub struct TestManager {}
impl Manager for TestManager {
type Connection = String;
type Error = String;
async fn connect(&self) -> Result<Self::Connection, Self::Error> {
Ok("conn".to_string())
}
async fn check(&self, conn: &mut Self::Connection) -> Result<(), Self::Error> {
//check should use conn.ping()
if conn == "error" {
return Err(Self::Error::from("error".to_string()));
}
Ok(())
}
}
#[tokio::main]
async fn main() {
let p = Pool::new(TestManager {});
println!("status = {}",p.state());
p.set_max_open(10);
println!("status = {}",p.state());
let mut conn = p.get().await.unwrap();
println!("conn = {}",conn.deref_mut());
let mut conn = p.get_timeout(Some(Duration::from_secs(1))).await.unwrap();
println!("conn = {}",conn.deref_mut());
}