3 个版本 (重大更改)
0.3.0 | 2021年6月15日 |
---|---|
0.2.0 | 2020年9月3日 |
0.1.0 | 2020年8月18日 |
#44 在 #task-queue
每月下载 29 次
在 coil 中使用
16KB
374 行
Coil深受swirl的启发,并在代码库的许多地方借鉴了其代码。
支持同步和异步作业。同步作业将被生成到由rayon
管理的线程池中。异步作业将被生成到执行器上。唯一的要求是执行器实现了futures Spawn
trait。这样,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://opensource.org/licenses/MIT下使用
该程序按照GPLv3重新许可。源中提供了Swirl
的原始MIT许可证副本。
依赖项
~1.5MB
~35K SLoC