【发布时间】:2019-05-20 18:31:36
【问题描述】:
我正在尝试编写一个简单的 Rust 程序,它使用 shiplift 读取 Docker 统计数据,并使用 rust-prometheus 将它们公开为 Prometheus 指标。
shiplift stats 示例自行正确运行,我正在尝试将其集成到服务器中
fn handle(_req: Request<Body>) -> Response<Body> {
let docker = Docker::new();
let containers = docker.containers();
let id = "my-id";
let stats = containers
.get(&id)
.stats().take(1).wait();
for s in stats {
println!("{:?}", s);
}
// ...
}
// in main
let make_service = || {
service_fn_ok(handle)
};
let server = Server::bind(&addr)
.serve(make_service);
但似乎流永远挂起(我无法产生任何错误消息)。
我还在shiplift example 中尝试了相同的重构(使用take 和wait 而不是tokio::run),但在这种情况下我收到错误executor failed to spawn task: tokio::spawn failed (is a tokio runtime running this future?)。 shiplift 是否需要 tokio?
编辑:
如果我理解正确的话,我的尝试是行不通的,因为wait 将阻止tokio 执行程序,而stats 将永远不会产生结果。
【问题讨论】:
标签: rust rust-tokio