aiohttp.client 您所在的位置:网站首页 disconected翻译 aiohttp.client

aiohttp.client

2023-08-07 03:00| 来源: 网络整理| 查看: 265

aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected

问题描述:

使用 aiohttp.ClientSession() 爬取数据时出现错误:aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected。

翻译:aiohttp.client_exceptions。 ServerDisconnectedError:服务器断开连接。

简单说就是服务器断开连接。网上这方面的解决方案太少了,这个问题卡了一天,所以在此将自己解决方法记录下来。。。

解决方法:

这是再 神栈Stack overflow 搜到的答案,没有解决,但是方向已经很明确了,“站在巨人的肩膀上” 最终解决了问题。

这很可能是由HTTP服务器的配置引起的。 ServerDisconnectedError至少有两个可能的原因:

1)、服务器可以限制可以从单个IP地址建立的并行TCP连接的数量。 默认情况下,aiohttp已经将并行连接的数量限制为100。 可以试着降低限制,看看是否能解决问题。 为此,您可以创建一个带有不同限值的自定义TCPConnector,并将其传递给ClientSession:

connector = aiohttp.TCPConnector(limit=50) async with aiohttp.ClientSession(connector=connector) as session:

2)、 服务器可以限制TCP连接的持续时间。 默认情况下,aiohttp使用HTTP keep-alive,因此同一个TCP连接可以用于多个请求。 这可以提高性能,因为不必为每个请求都建立一个新的TCP连接。 但是,一些服务器限制TCP连接的持续时间,如果对许多请求使用相同的TCP连接,服务器可以在您完成连接之前关闭它。 您可以禁用HTTP keep-alive作为一种变通方法。 为此,您可以创建一个自定义TCPConnector,将参数force_close设置为True,并将其传递给ClientSession:

connector = aiohttp.TCPConnector(force_close=True) # 禁用 HTTP keep-alive async with aiohttp.ClientSession(connector=connector) as session:

最终我的解决方法:

上面的方法1 + 超时设置:

timeout = aiohttp.ClientTimeout(total=600) # 将超时时间设置为600秒 connector = aiohttp.TCPConnector(limit=50) # 将并发数量降低 async with aiohttp.ClientSession(connector=connector, timeout=timeout) as session: async with session.get(url[0], headers=headers) as response:

解决问题。

我的博客:python—aiohttp库:有介绍 aiohttp 的使用及部分参数!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有