Как оценить время итерации и отобразить его с tqdm a для l oop? - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу оценить продолжительность итераций следующего кода и отобразить его на индикаторе выполнения (tdqm). Эта функция даст все возможные комбинации string.printable.


import strings
from itertools import combinations

def generate_combinations(iterable):
  lst = list(iterable)
  for lenght in range(0, len(lst) + 1):
    for i in combinations(lst, lenght):
      with open('passwords.txt', 'a') as f:
        w = ''.join(map(str, i))
        f.write(w + '\n')

generate_combinations(string.printable)

Я думаю, вы можете сделать это, используя time и tqdm.

Ожидаемый результат:

estimated time: 12 seconds left
tqdm progress bar: 12% |||||||...

1 Ответ

0 голосов
/ 28 апреля 2020

Окончательный ответ (с предложением @ jq170727) следующий код:


import string
from tqdm.auto import trange, tqdm
from itertools import permutations

Запрошенный генератор (в google colab, с использованием TPU: около 10 Кб / с)

def combined(lst, lenStart, lenEnd):
  for i in trange(lenStart, lenEnd + 1, desc='Progress'):
    for subset in tqdm(permutations(lst, i),  desc='Subsets', leave = False):
      w = ''.join(map(str, subset))
      yield w

И вот мы получили тот же генератор с большей эффективностью (на Google Colab, используя TPU: около 950k / s)

def compress_permutation(lst, lenStart, lenEnd):
  yield ','.join([''.join(map(str, subset)) for i in trange(lenStart, lenEnd + 1, desc='Progress') for subset in tqdm(permutations(lst, i), desc='Subsets', leave = False)])
iterable = list(string.printable[:94])
lenStart, lendEnd = 1, 9

for subset in compress_permutation(iterable, l1, l2):
  with open('passwords.txt', 'a') as f:
    f.write(subset)
...