You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

await协程与await Task有何区别?FastAPI下redis两种异步查询写法差异

功能层面差异
  • 两者完全没有功能差别,返回结果、异常处理逻辑完全一致

asyncio.ensure_future()的作用是把传入的协程包装成Task对象,提交到当前事件循环等待调度。但你在包装后立刻await这个Task,和直接await原始的redis.get(key)协程的执行逻辑是完全等价的:都会阻塞等待Redis查询完成后拿到返回值,查询过程中抛出的连接异常、超时异常等也会完全相同的向上抛出,不会有任何逻辑差异。

性能层面差异
  • 两者性能差距极其微小,get_2会有几乎可忽略的额外开销

get_2比get_1多了一步创建Task实例的操作,这个操作的资源消耗非常低,普通业务场景下根本感知不到二者的性能差异,只有在单进程每秒数万次以上的高频调用压测场景下,才会体现出可以测量到的微小性能差距。

额外优化建议

你给出的两个示例函数都存在一个更明显的性能问题:每次调用函数都会执行aioredis.from_url("redis://localhost")新建Redis连接,连接新建的开销远大于上面提到的Task创建开销,建议将Redis连接池实例全局初始化复用,不要每次请求都新建连接。


内容的提问来源于stack exchange,提问作者Rocherlee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:15:02