前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每周一库】prodash - 用来显示并发应用程序进度的仪表板

【每周一库】prodash - 用来显示并发应用程序进度的仪表板

作者头像
MikeLoveRust
发布2020-03-03 10:20:00
3530
发布2020-03-03 10:20:00
举报

在控制台应用程序中,如果通过自己的实现能够向用户展示程序的进程是一件繁琐的事。同时高并发程序的开发也是系统编程语言中很重要的环节,对高并发程序进行debug和基准测试也是难度不低的事。

今天介绍的库可以帮助开发者高效的开发出可以在终端中显示程序运行进程的控制台应用程序,也可以帮助高并发程序开发者对程序进行debug或基准测试。

prodash

Prodash 是一个用来显示并发应用程序进度的仪表板

它由两部分组成

  • 一个用来收集进程信息和其他消息的
  • 一个终端用户界面,显示以上信息以及应用程序本身提供的可选自由格式信息

基准测试基本可以表明,虽然不是异步的,但接近透明和无阻塞的性能。

终端用户界面应该是性能上最不透明的部分,但可以通过设置降低刷新数据的频率。

终端用户界面

默认情况下,终端用户界面会显示所有状态。

一个终端用户界面的实现模块,能够可视化所有存储在进程树内的信息。

请注意,它位于tui-renderer功能切换开关的后面,默认情况下已启用。

例子

代码语言:javascript
复制
use futures::task::{LocalSpawnExt, SpawnExt};
use prodash::tui::ticker;
// 获取一个进程树
let root = prodash::Tree::new();
// 配置gui,为其提供一个不断变化的树的句柄
let render_fut = prodash::tui::render(
    root.clone(),
    prodash::tui::TuiOptions {
        title: "minimal example".into(),
        ..prodash::tui::TuiOptions::default()
    }
)?;
// 由于它会一直不停运行,我们需要一种可以停止它的方法。
let (render_fut, abort_handle) = futures::future::abortable(render_fut);
let pool = futures::executor::LocalPool::new();
// 将gui放入后台
let gui = pool.spawner().spawn_with_handle(async { render_fut.await.ok(); () })?;
// …并运行可提供进度的任务
pool.spawner().spawn_local({
    use futures::StreamExt;
    let mut progress = root.add_child("task");
    async move {
        progress.init(None, Some("items"));
        let mut count = 0;
        let  mut ticks = ticker(std::time::Duration::from_millis(100));
        while let Some(_) = ticks.next().await {
            progress.set(count);
            count += 1;
        }
    }
})?;
// …完成后,停止gui
abort_handle.abort();
//…然后等待运行结束
futures::executor::block_on(gui);

记录日志

如果启用了log-renderer功能(默认),大多数对progress的调用也将被记录下来。这样,即使没有终端用户界面,也会有进度消息。请注意,不应在启用此功能和使用终端用户界面的情况下将日志传向stdout,因为这会严重干扰TUI。

示例程序

可参考 仪表板示例.

用以下命令运行 cargo run --example dashboard

其他功能可以用以下命令查询 cargo run --example dashboard -- --help.

模块

代码语言:javascript
复制
一个
终端用户界面
的实现模块,能够可视化所有存储在
进程树
内的信息。

代码语言:javascript
复制
警告
级别记录日志信息

结构

TreeOptions

用来配置新的 tree::Root 实例

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • prodash
  • 终端用户界面
  • 例子
  • 记录日志
  • 示例程序
    • 模块
        • 结构
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档