python-3.x - Python 多处理(TypeError:无法序列化 '_io.BufferedReader' 对象)
问题描述
我正在尝试使用 Pool 对 zip 文件进行字典攻击以提高速度。但是我在 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 中抛出相同的异常
解决方案
推荐阅读
- angular - 如何在 jhipster 的“home.component.html”上显示/显示多个实体?
- terraform - 如何将 terraform 状态上传到 s3 存储桶?
- google-apps-script - 仅将非空单元格附加到另一个工作表谷歌脚本
- python - Python:带空格的 str.split() 给出索引错误
- javascript - 成功获取后如何打印成功消息?
- flutter - 未找到 MaterialApp 中的 Inkwell
- c++ - 在输入一个超出无符号短整数范围的整数后,打印无符号短整数值的规则是什么?
- java - Java中excel文档的搜索算法
- python - 加载音乐期间未定义的 pygame 错误
- java - 启动 ApplicationContext 时出错。要显示自动配置报告,请在启用“调试”的情况下重新运行您的应用程序。应用程序运行失败