О Python и многопоточности для оптимизации:
Обратите внимание, что Python использует GIL (Global Interpreter Lock) Другими словами. Python никогда не выполнит более одного Python байтового кода одновременно, даже если у вас несколько потоков и несколько процессоров.
Так что для чистого Python кода (без привязок C этот выпуск GIL) Python многопоточность никогда не увеличит производительность)
Если вы хотите повысить производительность, я предлагаю вместо этого использовать многопроцессорный модуль.
О потенциальных оптимизациях:
Я пытался угадать пароль awdf
на моем компьютере старше 10 лет:
С вашим кодом требуется около 18,5 секунд:
1.) Удалить print () до 11,3 секунд
2.) вызов функции keyboard.is_pressed()
недешев, поэтому проверяйте ее только каждые 1000 раз. Вы опускаетесь до 1,3 секунд
вы делаете это с:
if count % 1000 == 0:
if keyboard.is_pressed("esc"):
print("\"esc\" pressed. Program ended.")
exit()
3.) более простым способом преобразования результата itertools.product в пароль
вместо
i = str(i)
i = i.replace("'", "")
i = i.replace(" ", "")
i = i.replace(",", "")
i = i.replace("(", "")
i = i.replace(")", "")
просто сделайте
i ="".join(i)
до 0,2 секунды
4.) Вместо конвертирования Используя каждый результат itertools.product (кортеж) в строку, я могу преобразовать строку пароля вне l oop один раз в кортеж, поэтому я сравниваю кортежи и не конвертирую.
I до 0,15 с
Самая быстрая версия с последующими 0,06 с.
Больше не нужно считать / больше не прерывать с esc
(это нужно было сделать, убив процесс)
chars = ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_.")
pw = tuple(pw)
for CharLength in range(1, 25):
passwords = (itertools.product(chars, repeat = CharLength))
first_match = filter(lambda elm: elm == pw, passwords)
try:
passwd = next(first_match)
passwd = "".join(passwd)
print("Password found: " + passwd)
except StopIteration:
pass
Но учтите, что в большинстве реальных случаев ios выяснение правильности пароля выполняется не путем сравнения строк, а путем вычисления га sh. Эти операции намеренно медленные, поэтому они, вероятно, будут гораздо важнее, чем любая из моих оптимизаций здесь.