Что я могу использовать в качестве индикатора выполнения и подсчета итераций? Python

#python-3.x #progress-bar #counting

#python-3.x #индикатор выполнения #подсчет

Вопрос:

Например, я пытался использовать 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 м, как это сделать, а не сценарий замедления?

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%, когда оно закончится)

Вы можете прокомментировать логику «if b in and print» без изменений.

Комментарии:

1. Вы можете использовать tqdm пакет

2. Я пробую все, у всех них проблемы с высоким уровнем на python 3.8, все они замедляют работу скрипта, без прогерсов скрипт завершает работу на 0,001 секунды, с bares его замедление на 5-10 секунд!

Ответ №1:

Причина, по которой скрипт замедляется, заключается в том, что combinations_with_replacement() функция вызывается для каждого обновления индикатора выполнения.
Я вычислил значение вне цикла, и результат был мгновенным.
Скорость выполнения увеличилась с 2 с / с (0,5 ит / с) до> 60 ит / с

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

Комментарии:

1. его работа, но индикатор выполнения имеет только 2 этапа, 0 и 100. Так что теперь он работает только как timeit

2. Дело не в том, что индикатор выполнения имеет только 2 этапа, а в том, что он вычисляется очень быстро, поэтому мгновенно переходит от 0 к 100..

3. Я обновляю сообщение, пробую то, что я поставил (это то же самое, но делаю больше вычислений с помощью большего количества повторений из itertools.конец продукта вы увидите, что он статичен до завершения скрипта)

4. Я не понимаю вашего вопроса… Вам нужно, чтобы он работал медленнее? Вы можете использовать time.sleep() для этого, и вы не делаете больше вычислений с помощью одного оператора if..

5. Чего вы не понимаете? Мне нужен индикатор выполнения, чтобы видеть прогресс, а не видеть начало и время, для этого я могу использовать timeit, как я говорю, ваше решение не работает! попробуйте, как в примере в fisrt post, и вы увидите, что прогресса нет — 0 при запуске скрипта и мгновенно 100%, когда он и , но никакого прогресса, например, 1 2 3 4%, независимо от того, как долго он выполняется