当前位置: 仪表板 >> 仪表板前景 >> 每周一库prodash用来显示
在控制台应用程序中,如果通过自己的实现能够向用户展示程序的进程是一件繁琐的事。同时高并发程序的开发也是系统编程语言中很重要的环节,对高并发程序进行debug和基准测试也是难度不低的事。
今天介绍的库可以帮助开发者高效的开发出可以在终端中显示程序运行进程的控制台应用程序,也可以帮助高并发程序开发者对程序进行debug或基准测试。
prodashProdash是一个用来显示并发应用程序进度的仪表板
它由两部分组成
一个用来收集进程信息和其他消息的树
一个终端用户界面,显示以上信息以及应用程序本身提供的可选自由格式信息
基准测试基本可以表明,虽然树不是异步的,但接近透明和无阻塞的性能。
终端用户界面应该是性能上最不透明的部分,但可以通过设置降低刷新数据的频率。
终端用户界面默认情况下,终端用户界面会显示所有状态。
一个终端用户界面的实现模块,能够可视化所有存储在进程树内的信息。
请注意,它位于tui-renderer功能切换开关的后面,默认情况下已启用。
例子usefutures::task::{LocalSpawnExt,SpawnExt};useprodash::tui::ticker;//获取一个进程树letroot=prodash::Tree::new();//配置gui,为其提供一个不断变化的树的句柄letrender_fut=prodash::tui::render(root.clone(),prodash::tui::TuiOptions{title:"minimalexample".into(),..prodash::tui::TuiOptions::default()})?;//由于它会一直不停运行,我们需要一种可以停止它的方法。let(render_fut,abort_handle)=futures::future::abortable(render_fut);letpool=futures::executor::LocalPool::new();//将gui放入后台letgui=pool.spawner().spawn_with_handle(async{render_fut.await.ok();()})?;//…并运行可提供进度的任务pool.spawner().spawn_local({usefutures::StreamExt;letmutprogress=root.add_child("task");asyncmove{progress.init(None,Some("items"));letmutcount=0;letmutticks=ticker(std::time::Duration::from_millis());whileletSome(_)=ticks.next().await{progress.set(count);count+=1;}}})?;//…完成后,停止guiabort_handle.abort();//…然后等待运行结束futures::executor::block_on(gui);记录日志
如果启用了log-renderer功能(默认),大多数对progress的调用也将被记录下来。这样,即使没有终端用户界面,也会有进度消息。请注意,不应在启用此功能和使用终端用户界面的情况下将日志传向stdout,因为这会严重干扰TUI。
示例程序可参考仪表板示例.
用以下命令运行cargorun--exampledashboard
其他功能可以用以下命令查询cargorun--exampledashboard----help.
模块tree进程树tui一个终端用户界面的实现模块,能够可视化所有存储在进程树内的信息。宏info信息级别记录日志信息warn警告级别记录日志信息结构TreeOptions用来配置新的tree::Root实例预览时标签不可点收录于话题#个上一篇下一篇