#优雅退出 #tokio #async-await #运行时 #async-std #smol #集成

elegant-departure

简化优雅退出操作的实用工具包

4个版本 (2个破坏性更改)

0.3.0 2024年4月23日
0.2.1 2023年3月8日
0.2.0 2022年1月4日
0.1.0 2021年11月21日

#878异步

MIT 许可证

34KB
417

Elegant Departure

Crates.io License Build Status docs.rs

Rust crate,用于简化优雅的异步关闭

  • 易于使用,API最小化
  • 运行时独立(与tokio、async-std、smol等兼容)
  • 额外的集成(例如,tokio的Ctrl-C关闭、信号等)

使用方法

此crate位于crates.io上,可以通过将它们添加到项目的Cargo.toml中的依赖项来使用。

[dependencies]
elegant-departure = "0.3"

对于可选的tokio集成,您需要启用tokio功能

[dependencies]
elegant-departure = { version = "0.3", features = "tokio" }

示例

示例可以在示例目录中找到

  • 简单:没有tokio集成的简单示例
  • Axum:Axum集成示例
  • Tokio:Tokio集成示例
  • Hyper:使用Hyper webserver的关闭示例
  • Worker:使用select!实现的worker示例
  • Smol:使用smol运行时的示例
  • Async Std:使用async_std运行时的示例

使用tokio集成的小型示例

use std::time::Duration;

async fn worker(name: &'static str) {
    let guard = elegant_departure::get_shutdown_guard();

    println!("[{}] working", name);

    guard.wait().await;
    println!("[{}] shutting down", name);

    tokio::time::sleep(Duration::from_secs(1)).await;
    println!("[{}] done", name);
}

#[tokio::main]
async fn main() {
    tokio::spawn(worker("worker 1"));
    tokio::spawn(worker("worker 2"));

    elegant_departure::tokio::depart()
        // Shutdown on Ctrl+C and SIGTERM
        .on_termination()
        .await
}

依赖项

~3–11MB
~106K SLoC