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

同步multi_get比asyncio.gather实现的异步get快很多是否合理?

这种情况完全合理

核心原因分析:

  • 网络请求量级差异:同步get_multi是单次批量请求,只需要一次网络往返就能获取所有key;而你的异步代码里,每个key都要执行exists+get两次异步调用,N个key就会产生2N次独立的网络请求。哪怕是异步并发,大量请求的往返延迟累积,尤其是P99这类长尾延迟,会被个别慢请求显著放大。
  • 异步调度的额外开销:每个key都要创建asyncio.Task,加上多次异步IO的调度切换,这些额外的调度成本在key数量多的时候会被快速累积,进一步拉高整体延迟。
  • 服务端处理效率:缓存服务(比如你用的Couchbase)对批量请求的优化远优于处理大量单key请求——服务端可以一次性批量查询,减少内部线程调度、锁竞争等开销,响应速度自然更快。

异步代码优化建议

如果想让异步版本性能追上同步批量,直接改用异步的批量获取接口,替代单个key的异步请求叠加。修改后的代码大概是这样:

async def main_async(cls, keys):
    cb = await cls.get_cb_conn_async()
    results = await cb.get_multi(keys, quiet=True)
    val_dicts = []
    for k in keys:
        if results.get(k):
            val_dicts.append({k: cls.cache_to_dict(results.get(k).value)})
        else:
            val_dicts.append({k: {}})
    return val_dicts

这样只需要一次异步批量请求,就能大幅降低延迟,接近同步版本的性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:33:15