Verfolgen des Fortschritts in Python

Warum werden Fortschrittsindikatoren benötigt?


Fortschrittsanzeigen (Fortschrittsbalken) - eine visuelle Anzeige des Arbeitsprozesses. Sie entlasten uns von der Notwendigkeit, uns Gedanken darüber zu machen, ob das Skript hängt, geben eine intuitive Vorstellung von der Geschwindigkeit seiner Ausführung und schlagen vor, wie viel Zeit bis zur Fertigstellung verbleibt.


Eine Person, die zuvor noch keine Fortschrittsindikatoren verwendet hat, kann darauf hinweisen, dass ihre Implementierung den Code erheblich komplizieren kann. Zum Glück ist das nicht so. Die folgenden kleinen Beispiele zeigen, wie Sie schnell und einfach den Fortschritt in der Konsole oder in der Benutzeroberfläche der schnell wachsenden PySimpleGUI- Grafikbibliothek nachverfolgen können .


Progress verwenden


Das erste, das wir haben, ist das Fortschrittsmodul .


Sie müssen lediglich die Anzahl der erwarteten Iterationen und den Typ des Indikators angeben und die Funktion bei jeder Iteration aufrufen:


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() 

Das Ergebnis der Arbeit:



Es gibt Indikatoren für jeden Geschmack:



Wir benutzen tqdm


Als nächstes folgt die tqdm- Bibliothek.


Schnelle und erweiterbare Fortschrittsanzeige für Python und CLI


Es wird nur ein Funktionsaufruf benötigt, um ein Ergebnis zu erhalten, das dem vorherigen ähnlich ist:


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

Wir bekommen:



Natürlich enthält das Bundle eine Reihe von Einstellungen und Optionen.


Wir nutzen den lebendigen Fortschritt


Eine andere Version der Syntax, mehr Standardanimationen als in den vorherigen Beispielen:


 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) 

Ergebnis:



GUI-Fortschrittsanzeige für Skript


Manchmal ist es erforderlich, dem Endbenutzer eine grafische Anzeige bereitzustellen.



Wie viel Code wird benötigt, um ein solches Ergebnis zu erzielen? Ein bisschen:


 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) 

Anzeige in PySimpleGUI-Anwendung


Betrachten Sie die Implementierung des Indikators in PySimpleGUI .



So geht's:


 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() 

Fazit


Wie Sie sehen, ist es nicht schwierig, Informationen über den Ausführungsfortschritt hinzuzufügen: Es gibt nur wenig Code, und die Reaktionsfähigkeit ist stark erhöht. Verwenden Sie Indikatoren, um nie wieder zu erraten, ob der Prozess hängt oder nicht!

Source: https://habr.com/ru/post/de483400/


All Articles