8 个版本
0.4.1 | 2024年7月5日 |
---|---|
0.4.0 | 2024年7月4日 |
0.3.1 | 2023年9月26日 |
0.2.1 | 2021年12月14日 |
0.1.1 | 2020年12月1日 |
#234 在 构建实用工具
429 每月下载量
用于 blobnet
17KB
185 行
shutdown
shutdown 可以用于优雅地退出(部分)运行中的程序
示例
以下示例展示了如何创建一个新的关机对象,创建一些分支,订阅一些监听器并信号一个分支
use shutdown::Shutdown;
fn main() {
let root = Shutdown::new().unwrap();
// Create two new branches.
let branch1 = root.branch();
let branch2 = root.branch();
// Create two new subscribers to the first branch.
let subscriber1 = branch1.subscribe();
let subscriber2 = branch1.subscribe();
// Signal the first branch.
branch1.signal();
}
用法
将 shutdown 和 Tokio 添加到你的依赖项中
shutdown = "0.4"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
然后在你的 main.rs
中开始使用
use shutdown::Shutdown;
use tokio::time::{sleep, Duration};
#[tokio::main]
async fn main() {
let mut root = Shutdown::new().unwrap();
while !root.is_signalled() {
// Wait for a task to finish while also
// listening for any shutdown signals.
tokio::select! {
_ = sleep(Duration::from_secs(30)) => (),
_ = root.received() => break,
}
// Subscribe and spawn a long running task which will
// end its loop when a shutdown signal is received.
let shutdown = root.subscribe();
tokio::spawn(async move {
while !shutdown.is_signalled() {
// Do stuff until we're shutdown...
}
})
}
}
运行测试
因为每个 "根" 关机对象都会注册自己以监听 SIGINT 和 SIGTERM 信号,所以测试需要逐个运行。因此,要运行测试,请执行
$ cargo test -- --test-threads=1
贡献
欢迎和感谢拉取请求和问题!
许可证
shutdown 在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发
- Apache 许可证 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
依赖项
~4–12MB
~118K SLoC