Я пытаюсь осуществить словарную атаку на zip-файл, используя Pool для увеличения скорости.
Но я сталкиваюсь с следующей ошибкой в Python 3.6, пока она работает в Python 2.7:
Traceback (most recent call last):
File "zip_crack.py", line 42, in <module>
main()
File "zip_crack.py", line 28, in main
for result in results:
File "/usr/lib/python3.6/multiprocessing/pool.py", line 761, in next
raise value
File "/usr/lib/python3.6/multiprocessing/pool.py", line 450, in _ handle_tasks
put(task)
File "/usr/lib/python3.6/multiprocessing/connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "/usr/lib/python3.6/multiprocessing/reduction.py", line 51, in dumps
cls(buf, protocol).dump(obj)
TypeError: cannot serialize '_io.BufferedReader' object
Я пытался найти те же ошибки, но не смог найти ответ, который может помочь здесь.
Код выглядит так
def crack(pwd, f):
try:
key = pwd.strip()
f.extractall(pwd=key)
return True
except:
pass
z_file = zipfile.ZipFile("../folder.zip")
with open('words.dic', 'r') as passes:
start = time.time()
lines = passes.readlines()
pool = Pool(50)
results = pool.imap_unordered(partial(crack, f=z_file), lines)
pool.close()
for result in results:
if result:
pool.terminate()
break
pool.join()
Я также попробовал другой подход, используя карту
with contextlib.closing(Pool(50)) as pool:
pool.map(partial(crack, f=z_file), lines)
, который отлично работал и быстро находил пароли в Python 2.7, но выдает то же исключение в Python 3.6