【问题标题】:What i can use as progress bar and count iterations ? Python我可以用什么作为进度条和计数迭代? Python
【发布时间】:2021-01-12 15:41:14
【问题描述】:

例如,我尝试使用 progress.bar、alive_progress。

from alive_progress import alive_bar
with alive_bar(100) as bar:
    for i in range(100):
        for i in combinations_with_replacement(['a','b','c','a','b','c','a','b'], 8):
            b = (''.join(i))
            bar()

我有很多烦人的问题,或者它减慢了脚本,不能作为期望的打印(在这个栏上打印简单的打印,或者在任何打印后创建新的栏。

如果我在没有条形/计数的情况下运行它,它会在 ~0.001 秒内完成。

例如,我尝试使用 tqdm

    from itertools import *
    from tqdm import trange
    for i in trange(100):
        for i in combinations_with_replacement(['a','b','c','a','b','c','a','b','a','b','c','a','b','c','a','b','a','b','c','a','b','c','a','b'], 8):
            b = (''.join(i))

如果我禁用它,它会在不到一秒的时间内完成,如果我使用它,它预计时间是 3 m,如何处理这个而不是减速脚本?

UPD:如果相信在 goodle 上发现的信息,pyhon 的进度条和计数器不可用,前提是您不关心 1000% 减速脚本。

但是有些进度条是如何在任何 brutforce 脚本、生成器等中使用的... 我不明白。

from itertools import *
from collections import Counter
from tqdm import *
#for i in tqdm(Iterable):
limit = product(['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'], repeat = 8)
for i in trange(100):
    for j in limit:
        b = (''.join(j))
        if b in ['bbbbbbbb','11111111','aaaaaaaa','00001111']:
            print (b)

它在脚本之前是静态的,因此无法正常工作。 (所有运行保持在 0% 并在结束时立即进入 100%)

您可以注释逻辑“如果 b in 并打印”,但没有任何变化。

【问题讨论】:

  • 你可以使用tqdm
  • 我尝试了所有,它们都在 python 3.8 出现了 hv 问题,它们都减慢了脚本,没有 progerss 裸机脚本在 0.001 秒完成工作,裸机,其减慢 5 - 10 秒!

标签: python-3.x progress-bar counting


【解决方案1】:

脚本变慢的原因是每次更新进度条都会调用combinations_with_replacement() 函数。
我计算了循环外的值,输出是即时的。
执行速度从 2 s/it (0.5 it/s) -> 60 it/s

from itertools import *
from tqdm import trange
limit = combinations_with_replacement(['a','b','c','a','b','c','a','b','a','b','c','a','b','c','a','b','a','b','c','a','b','c','a','b'], 8)
for i in trange(100):
    for j in limit:
        b = (''.join(j))

【讨论】:

  • 它的工作,但进度条只有 2 个阶段,0 和 100。所以它现在只工作多少时间
  • 进度条不是只有2个阶段,而是计算速度非常快,所以瞬间从0到100..
  • 我更新了帖子,试试我放的东西(它是一样的,但是通过从 itertools.product 结束更多的重复进行更多的计算,你会看到它在脚本结束之前是静态的)
  • 我不明白你的问题...你需要它去慢吗?您可以为此使用time.sleep(),并且您不会使用单个 if 语句进行更多计算..
  • 你不明白什么?我需要进度条来查看进度看不到开始和时间,为此我可以使用 timeit,我怎么说你的解决方案不起作用!尝试在第一篇文章中的示例,您会看到没有进度 - 脚本开始时为 0,当它和时立即 100%,但没有像 1 2 3 4 % 这样的进度,无论它运行多长时间
猜你喜欢
  • 2022-01-16
  • 2020-01-27
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多