gpt4 book ai didi

serialization - multiprocessing.pool.MaybeEncodingError : Error sending result: Reason: 'TypeError("cannot serialize '_io.BufferedReader' object", )'

转载 作者:行者123 更新时间:2023-12-05 05:17:47 32 4
gpt4 key购买 nike

我收到以下错误:

multiprocessing.pool.MaybeEncodingError: Error sending result: '<multiprocessing.pool.ExceptionWithTraceback object at 0x7f758760d6a0>'. Reason: 'TypeError("cannot serialize '_io.BufferedReader' object",)'

运行这段代码时:

from operator import itemgetter
from multiprocessing import Pool
import wget


def f(args):
print(args[1])
wget.download(args[1], "tests/" + target + '/' + str(args[0]), bar=None)

if __name__ == "__main__":
a = Pool(2)
a.map(f, list(enumerate(urls))) #urls is a list of urls.

错误是什么意思,我该如何解决?

最佳答案

第一条建议:

  1. 您应该经常检查项目的维护情况。显然 wget 包不是。
  2. 您应该检查包使用了哪些库,以防发生此类情况。

现在,进入正题。

显然 wget 使用 urllib.request 来发出请求。经过一些测试,我得出的结论是它不能处理所有 HTTP 状态代码。更具体地说,当 HTTP 状态为例如 304 时,它会以某种方式中断。这就是为什么您必须使用具有更高级别接口(interface)的库。甚至 urllib.request 在官方 documentation 中也这样说:

The Requests package is recommended for a higher-level HTTP client interface.

所以,事不宜迟,这里是工作片段。

您可以只更新您想要保存文件的位置。

from multiprocessing import Pool

import shutil
import requests


def f(args):
print(args)
req = requests.get(args[1], stream=True)
with open(str(args[0]), 'wb') as f:
shutil.copyfileobj(req.raw, f)

if __name__ == "__main__":
a = Pool(2)
a.map(f, enumerate(urls)) # urls is a list of urls.

shutil lib 用于文件操作。在这种情况下,将数据流式传输到文件对象。

关于serialization - multiprocessing.pool.MaybeEncodingError : Error sending result: Reason: 'TypeError("cannot serialize '_io.BufferedReader' object", )',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48761983/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com