Concernant le sujet du titre, il a introduit un package appelé tqdm. Quand je l'ai essayé, la charge était si légère qu'il semblait idiot de frapper seul stdout, et il semble que je l'utilise habituellement par la suite.
Je n'aime pas la surcharge de la boucle stdout, donc j'ai senti que c'était un problème de l'éclaircir, mais c'était dommage. Essayez-le.
https://pypi.python.org/pypi/tqdm
_tqdm.py Si vous regardez l'utilisation, c'est comme ça, mais pour ceux qui veulent l'essayer 2. Pour x personnes, veuillez utiliser xrange.
> python -m pip install tqdm
>>> from tqdm import tqdm
>>>
>>> for _ in tqdm(range(0x100000)):
>>> pass
Ce qui suit est une mauvaise phrase, à l'exception des commentaires reçus.
Alors que le travail de moulage des ensembles de formation pour l'apprentissage est devenu des dizaines de milliers, j'en suis venu à vouloir une fonction qui décompte. J'ai cherché une mise en œuvre soignée, mais c'était différent, alors je l'ai inventée.
> progbar.py
24% |#######-------------------------| 0:12:06
100% |################################| 0:00:00
C'est un peu plus facile car j'ai pu visualiser l'heure de fin programmée. Cela fait du bien pour une boucle de formation en machine learning.
Opération confirmée uniquement sous environnement Windows.
progbar.py
import sys, time
class progbar:
def __init__(self, period=100, bars=32):
self._period = period
self.bars = bars
self.active = True
self.start = time.time()
def dispose(self):
if self.active:
self.active = False
self.update(self._period)
sys.stdout.write("\n")
def __del__(self):
self.dispose()
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
self.dispose()
def period(self):
return self._period
def update(self, tick):
rate = tick / self._period
# progress rate
str = "{0:7d}% ".format(int(rate*100))
# progress bar
bar_prog = int(rate * self.bars)
str += "|"
str += "#" * ( bar_prog)
str += "-" * (self.bars - bar_prog)
str += "|"
# calc end
elapsed = time.time() - self.start
predict = (elapsed * (1 - rate) / rate) if not rate == 0.0 else 0
s = int(predict)
m, s = divmod(s, 60)
h, m = divmod(m, 60)
d, h = divmod(h, 24)
str += "{0:3d}:{1:02d}:{2:02d}\r".format(h,m,s)
sys.stdout.write(str)
def main():
# how to use
with progbar(500) as pb:
for i in range(pb.period()):
time.sleep(0.01)
if i % 10 == 0:
pb.update(i)
if __name__ == '__main__':
main()
\ # L'affichage de l'heure est une puissance.
Recommended Posts