aiohttp报错concurrent.futures._base.TimeoutError的解决
今天在把一个多线程爬虫改写成使用协程的爬虫,在一个接口一直报concurrent.futures._base.TimeoutError
,代码是这样的
1 |
|
出错的位置是最后一行
其实挺奇怪的,这是一个 util,很多接口都使用这个函数,但是只有一个报错。
最后通过 https://github.com/aio-libs/aiohttp/issues/4015 找到了报错原因。
await session.post(url)
实际上只是保证接收了一个 chunk,剩余部分需要使用者自行操作进行读取,为的是在得知是大文件的时候可以放弃处理,但是在我的代码里 r.json()已经跳出 with,连接已经关闭,所以读取 body 报错
修正方案即在 with 内操作 body
1 |
|
只有一个报错原因应该就是其他接口内容较少,一个 chunk 已经包含,即内容已经完全读取。报错的这个内容多,剩余 chunks 需要手动触发接收。
aiohttp报错concurrent.futures._base.TimeoutError的解决
https://hunsh.net/archives/70/