理解和调试 `asyncio.TimeoutError from None` 错误

2023-12-31

我遇到了 aiohttp 的问题,出现以下错误,但不确定修复它的最佳方法:

Traceback (most recent call last):
  File "/app/app/services/file_ingestion_utils.py", line 110, in send_api_request
    async with session.post(url, headers=self.headers, data=payload) as response:
  File "/usr/local/lib/python3.8/site-packages/aiohttp/client.py", line 1117, in __aenter__
    self._resp = await self._coro
  File "/usr/local/lib/python3.8/site-packages/aiohttp/client.py", line 544, in _request
    await resp.start(conn)
  File "/usr/local/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 905, in start
    self._continue = None
  File "/usr/local/lib/python3.8/site-packages/aiohttp/helpers.py", line 656, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError

我看到从here https://stackoverflow.com/questions/54132962/why-asyncio-timeouterror-is-raised这些错误可能有点模糊,但我至少想了解至少在我的情况下导致这些错误的原因。我的实现如下所示。

    async def async_request(self, df, entity):

        api_request_records = []
        ...some logic to prepare records...


        @backoff.on_exception(backoff.expo, aiohttp.ClientError, max_tries=2)
        async def send_api_request(payload, session):

            url = <some_url>

            try:
                async with session.post(url, headers=self.headers, data=payload) as response:
                      ...some response handling logic...
                    
            except asyncio.TimeoutError:
                self.logger.exception(f"Asyncio TimeoutError on {url} and payload {payload}")

        async with aiohttp.ClientSession() as session:
            await asyncio.gather(
                *[send_api_request(api_request_record, session)) for api_request_record in api_request_records])

Q1:当长度api_request_records很小,该方法工作正常,但是当它很大时,我更有可能得到 TimeoutError。为什么?

Q2:设置 ClientSession(timeout=...) 参数是这里的秘密,因为根据here https://stackoverflow.com/questions/53049523/how-to-prevent-raise-asyncio-timeouterror-and-continue-the-loop,可能会有帮助吗?但是,我觉得这个响应可能有点过时,因为它指出现在使用 ClientTimeout 对象而不是 int。相关地,根据官方文档here https://docs.aiohttp.org/en/stable/client_reference.html#clienttimeout,默认的 ClientTimeout 似乎已经是无限时间了total=None那么这也适用于 ClientSession 吗?

总的来说,希望得到一些帮助和推荐的方法。谢谢!


From https://docs.aiohttp.org/en/stable/client_quickstart.html#timeouts https://docs.aiohttp.org/en/stable/client_quickstart.html#timeouts

默认情况下,aiohttp 使用总共 300 秒(5 分钟)超时,这意味着 整个操作应在 5 分钟内完成。

所以,

session_timeout = aiohttp.ClientTimeout(total=None)
session = aiohttp.ClientSession(timeout=session_timeout)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解和调试 `asyncio.TimeoutError from None` 错误 的相关文章

随机推荐

  • 带有 Qt::AlignCenter 的 QPainter 无法正确居中文本

    我想做一个相当简单的绘图 在圆的中心写下两段文字 我的代码 painter gt drawText QRectF 0 0 m iSize m iSize Qt AlignCenter m sAlias n m sCode where m i
  • 会话路由#destroy 操作

    我链接到会话控制器的销毁操作 如下所示 路线 rb resources sessions only new create destroy Rails 对上面的链接进行了抱怨 没有路由匹配 action gt destroy controll
  • 使用 Linq 动态添加条件连接

    我有一个基本的搜索控件 它根据下拉列表提供的预定义搜索 过滤条件列出 CRM 中的公司 每个下拉菜单的默认选择是 全部 否则用户将选择特定的项目 我希望能够根据选择动态构建 Linq 查询 在 5 个选择器中 它们提供了我可以与 Compa
  • 使用 MockMvc 测试重定向 URL 的 HTTP 状态代码

    我想使用 MockMvc 在 Spring Boot 应用程序中测试登录过程 成功登录后 用户将被重定向到 home 为了测试这一点 我使用 Test public void testLogin throws Exception Reque
  • 数据结构中的自引用 - 检查相等性

    在我最初尝试创建不相交集数据结构时 我创建了一个Point数据类型与parent指向另一个的指针Point data Point a Point value a parent Point a rank Int 要创建单例集 Point创建它
  • 捕获所有无效 URL

    我最近升级了一个网站 几乎所有 URL 都发生了变化 我已经重定向了所有这些 或者我希望如此 但其中一些可能已经被我忽略了 有没有办法以某种方式捕获所有无效 URL 并将用户发送到某个页面 并以某种方式知道该人来自哪个 URL 以便我可以记
  • 在 TextMate 中,我无法使用 Rails tmbundle 创建部分

    Applications TextMate app Contents SharedSupport Support lib ui rb 355 in to plist An object in the argument tree could
  • PyCharm 能否以正确的顺序显示变量的字段?

    我定义了一个有几个字段的数据类 当我打印它时 它们以正确的顺序显示 def test dataclass class Image width int height int pixels object image Image width 4
  • 多线程感知模式下的 BOOST 库

    可以在所谓的线程感知模式下编译 BOOST 库 如果是这样 您将看到 mt 出现在库名称中 我不明白它给了我什么以及我什么时候需要使用这种模式 它给我带来任何好处吗 更重要的是 我对在无线程感知机制中编译 BOOST Threads 库 名
  • 如何使react swiper在垂直方向滑动

    我想让主页就像我可以在莫伊莱视图中一次滑动一篇文章一样 我尝试过反应滑动器 但反应滑动器正在水平滑动帖子 我想垂直滑动帖子 知道如何制作吗 你可以给它方向 只需像这样添加方向道具
  • python有比较和交换操作吗

    试图找到python是否支持CAS操作 无锁编程 像java中的并发 Python没有这些操作 Java 具有比 Python 更复杂的并发控制 CPython 几乎每个人都使用的典型实现 有一个您需要了解的全局解释器锁 Jython 是
  • Groovy 安全取消引用运算符 (?.) 的最佳 Scala 模仿?

    我想知道 Groovy 的最好的 Scala 模仿是什么安全取消引用运算符 http groovy codehaus org Null Object Pattern 或者至少有一些接近的替代品是 I ve 简要讨论一下 http www c
  • 带/多个条件赋值

    让我们来一个M 10 x 4 x 12 矩阵 作为例子 我以M 4 val 4 0 0 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1
  • 访问未定义的子类型时自定义编译错误消息

    我有一些类型 其中每个类型都有相同名称的子类型 struct TypeA typedef int subtype struct TypeB typedef float subtype 以及没有此子类型但在同一上下文中使用的类型 struct
  • 如何以声明方式使用数据绑定参数创建 RouteUrls?

    我正在使用 ASP NET 4 中的新路由功能 Web 表单 而不是 MVC 现在我有一个绑定到数据源的 asp ListView 其中一个属性是ClientID我想用它从 ListView 项目链接到另一个页面 在global asax我
  • 使用 Picasso 和自定义 Transform 对象加载大图像

    从 Android Gallery 使用 startActivityForResult 加载 大 图像 gt 1 5MB 时 我使用 Picasso 遇到内存不足异常 我使用自定义 Target 对象 因为我需要在位图准备就绪时对其进行预处
  • 城市街道的程序生成?

    我读过 L Systems Parish Muller 和 Kelly McCabe 并尝试实施this https stackoverflow com questions 12956334 how is l systems for roa
  • Coldfusion 为某些类添加 id

    目前我有一堆 HTML 存储在一个变量中 我将其输出到看起来有点像这样的页面 p class firstpara some stuff p p class subhead a heading p p class subsubhead a s
  • 处理 Silverlight 单元测试中的依赖对象

    一段时间以来 我一直在使用 NUnit 和 Moq 以及 Silverlight 代码编写单元测试 我一直遇到的一个问题与 DependencyObjects 有关 如果有任何东西是从 DependencyObject 派生的 那么我无法在
  • 理解和调试 `asyncio.TimeoutError from None` 错误

    我遇到了 aiohttp 的问题 出现以下错误 但不确定修复它的最佳方法 Traceback most recent call last File app app services file ingestion utils py line