5 个不稳定版本
0.4.0 | 2021年6月15日 |
---|---|
0.2.2 | 2021年2月8日 |
0.2.1 | 2021年2月8日 |
0.2.0 | 2020年9月3日 |
0.1.0 | 2020年8月18日 |
#1027 in 数据库接口
42KB
841 行
Coil 受 swirl 极大启发,并大量借鉴了 swirl 的代码。在代码库的许多地方,代码非常相似。
支持同步和异步任务。同步任务将生成由 rayon 管理的线程池。异步任务将在执行器上生成。唯一的要求是执行器实现 futures Spawn
特性。这样,coil
支持 Tokio
、smol
和 async-std
。
† 此软件处于 alpha 阶段,不打算用于生产环境。使用风险自负。
†† 此软件根据 GPLv3 许可证二次许可。swirl 的部分代码根据 MIT 许可证授权。请参阅 许可证 部分
示例
struct Size {
width: u32,
height: u32
}
#[coil::background_task]
async fn resize_image(id: u32, size: Size) -> Result<(), Error> {
// some work
}
在一个环境中
struct Size {
width: u32,
height: u32
}
struct Environment {
file_server_private_key: String,
http_client: http_lib::Client,
conn: sqlx::PgPool
}
#[coil::background_task]
async fn resize_image(env: &Environment, id: u32, size: Size) -> Result<(), Error> {
// some work
}
resize_image_with_env("tohru".to_string(), Size { height: 32, width: 32 }).enqueue(&pool).await;
let runner = coil::RunnerBuilder::new(env, Executor, pool)
.num_threads(8)
.build()
.unwrap();
runner.run_all_pending_tasks().await.unwrap()
与 swirl
的区别
- 支持异步任务/执行器
- 支持具有泛型参数的任务
- 使用 Messagepack 而不是 JSON 将数据序列化到 Postgres
- 在异步任务中,数据库查询将使用 SQLx 异步执行
- 迁移包含在二进制文件中,并通过
migrate
fn 公开。 - 入队是一个
async fn
许可证
此程序包含来自 swirl 库的代码,在 MIT 许可证下使用,许可证地址:https://github.com/sgrif/swirl/blob/master/LICENSE-MIT
此程序根据 GPLv3 许可证二次许可。源代码中提供了 swirl 的原始 MIT 许可证副本。
lib.rs
:
coil
是一个高效的 Postgres 后台任务队列。API 与 swirl 非常相似,实际上是基于 swirl 开发的。然而,除了 swirl 提供的功能外,coil
还可以
- 将异步任务队列到执行器,无论是
smol
、tokio
还是async-std
- 使用泛型队列函数
- 在
coil
中,SQL查询尽可能异步执行 - 迁移存储在二进制中,可通过
migrate()
函数访问。不再需要复制粘贴迁移文件!
依赖项
~22MB
~510K SLoC