追踪Python进度

为什么需要进度指示器?


进度指示器(进度条)-工作过程的可视化显示。 它们使我们不必担心脚本是否挂起,可以直观地了解脚本的执行速度,并建议还需要多少时间才能完成脚本。


以前从未使用过进度指示器的人可能会建议其实现会使代码变得非常复杂。 幸运的是,事实并非如此。 下面的小示例显示了如何在控制台或快速获得的PySimpleGUI图形库的界面中快速轻松地开始跟踪进度。


使用进度


我们拥有的第一个是Progress模块


您所需要做的就是表明预期的迭代次数,指标类型并在每次迭代时调用函数:


import time from progress.bar import IncrementalBar mylist = [1,2,3,4,5,6,7,8] bar = IncrementalBar('Countdown', max = len(mylist)) for item in mylist: bar.next() time.sleep(1) bar.finish() 

工作结果:



每种口味都有指标:



我们使用tqdm


接下来的是tqdm库。


适用于Python和CLI的快速且可扩展的进度指示器


只需一个函数调用即可获得与上一个函数相似的结果:


 import time from tqdm import tqdm mylist = [1,2,3,4,5,6,7,8] for i in tqdm(mylist): time.sleep(1) 

我们得到:



当然,该捆绑包附带了许多设置和选项。


我们使用实时进度


语法的另一个版本,比前面的示例中更多的默认动画:


 from alive_progress import alive_bar import time mylist = [1,2,3,4,5,6,7,8] with alive_bar(len(mylist)) as bar: for i in mylist: bar() time.sleep(1) 

结果:



脚本的GUI进度指示器


有时有必要向最终用户提供图形指示器。



要获得这样的结果需要多少代码? 一点:


 import PySimpleGUI as sg import time mylist = [1,2,3,4,5,6,7,8] for i, item in enumerate(mylist): sg.one_line_progress_meter('This is my progress meter!', i+1, len(mylist), '-key-') time.sleep(1) 

PySimpleGUI应用程序中的指示器


考虑在PySimpleGUI中指标的实现



方法如下:


 import PySimpleGUI as sg import time mylist = [1,2,3,4,5,6,7,8] progressbar = [ [sg.ProgressBar(len(mylist), orientation='h', size=(51, 10), key='progressbar')] ] outputwin = [ [sg.Output(size=(78,20))] ] layout = [ [sg.Frame('Progress',layout= progressbar)], [sg.Frame('Output', layout = outputwin)], [sg.Submit('Start'),sg.Cancel()] ] window = sg.Window('Custom Progress Meter', layout) progress_bar = window['progressbar'] while True: event, values = window.read(timeout=10) if event == 'Cancel' or event is None: break elif event == 'Start': for i,item in enumerate(mylist): print(item) time.sleep(1) progress_bar.UpdateBar(i + 1) window.close() 

结论


如您所见,添加有关执行进度的信息没有什么复杂的事情:几乎没有代码,并且响应速度大大提高了。 使用指示器不再猜测进程是否挂起!

Source: https://habr.com/ru/post/zh-CN483400/


All Articles