Per utilizzare qualsiasi framework di barra di avanzamento in modo utile, ad esempio per ottenere una percentuale di avanzamento effettiva e un ETA stimato, è necessario essere in grado di dichiarare quanti passaggi avrà.
Quindi, la tua funzione di calcolo in un altro thread, sei in grado di dividerlo in una serie di passaggi logici? Puoi modificarne il codice?
Non hai bisogno di riformattarlo o dividerlo in metodi reali, potresti semplicemente mettere alcuni yields strategici in alcuni punti al suo interno! Se la costosa funzione ha un ciclo for , inseriscene uno. Alla fine dovresti solo sapere quante rese verranno fatte, per ottenere i migliori risultati.
In questo modo, la tua funzione potrebbe essere qualcosa del genere:
def compute():
time.sleep(1) # some processing here
yield # insert these
time.sleep(1)
yield
time.sleep(1)
yield
o questo:
def compute():
for i in range(1000):
time.sleep(.1) # some processing here
yield # insert these
Con quel tipo di funzione, puoi installare:
pip install alive-progress
E usalo come:
from alive_progress import alive_bar
with alive_bar(3) as bar: # or a 1000 in the loop example.
for i in compute():
bar()
Per ottenere una barra di avanzamento interessante!
|█████████████▎ | ▅▃▁ 1/3 [33%] in 1s (1.0/s, eta: 2s)
Disclaimer: sono l'autore di alive_progress, ma dovrebbe risolvere bene il tuo problema. Leggi la documentazione su https://github.com/rsalmei/alive-progress , ecco un esempio di cosa può fare:
