首页 > 解决方案 > 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 中抛出相同的异常

标签: python-3.xmultiprocessingpool

解决方案


推荐阅读