#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%, независимо от того, как долго он выполняется