更新时间:2025-09-08 GMT+08:00
分享

获取异步IO结果

功能介绍

用于获取async_save、async_load等接口返回的异步Future对象的结果。调用get_result将阻塞,直到异步计算完成,并返回以token为单位的结果对象。

接口约束

  • 接口会休眠阻塞,直到异步结果可用。
  • 输入必须是CcFuture类型对象,由 async_save/async_load返回。

方法定义

ContextCaching.get_result(ccfuture)

请求参数说明

表1 请求参数列表

参数名称

参数类型

是否必选

描述

ccfuture

表2

参数解释:

异步计算返回的Future对象。

约束限制:

必须为async_save或async_load等接口返回的CcFuture实例,不能为None。

取值范围:

无。

默认取值:

无。

表2 CcFuture

方法名称

参数

返回结果

描述

result

表4

参数解释:

获取异步执行的结果。

取值范围:

无。

返回结果

表3 返回结果

类型

说明

表4

参数解释:

Context Caching访问内存池的执行结果。

取值范围:

无。

表4 CcResult

参数名称

参数类型

描述

success

int

参数解释:

请求的批量key读写连续成功的个数。

约束限制:

无。

取值范围:

0~请求key的个数。

默认取值:

无。

total

int

参数解释:

请求的批量key总个数。

约束限制:

无。

取值范围:

请求列表中批量key的个数。

默认取值:

无。

代码样例

本示例用于异步保存KVCache的请求,并获取每个请求的最终执行结果。

  1. hash语义下的保存和加载显存数据,参数:slot_mapping + hashes + offsets
    # 设置save请求的超时时间
    option = CcKvOption(timeout=5000)
    # 异步保存,获取结果
    block_size = 4
    slot_mapping = [0, 1, 2, 3, 4, 5, 6, 7] 
    hashes = [0xABCD, 0x1234]
    offsets = [4, 4]
    try: 
        fut = cc.async_save(slot_mapping = slot_mapping, hashes = hashes, offsets = offsets, option = option)
        res = cc.get_result(fut) 
        print("async_save(hash) result:", res)
    except EmsException as e: 
        print("async_save(hash) result:", res)
    # 异步读取,获取结果
    try: 
        fut = cc.async_load(slot_mapping = slot_mapping, hashes = hashes, offsets = offsets, option = option)
        res = cc.get_result(fut) 
        print("async_load(hash) result:", res)
    except EmsException as e: 
        print(f"async_load(hash) failed: {e}")
  2. token语义下的保存和加载显存数据,参数:slot_mapping + token_ids + mask
    # 设置save请求的超时时间
    option = CcKvOption(timeout=5000)
    # 异步保存,获取结果
    block_size = 4
    slot_mapping = [0, 1, 2, 3, 4, 5] 
    token_ids = [101, 102, 103, 104, 105, 106]
    mask = [0, 0, 0, 0, 1, 1]
    try: 
        fut = cc.async_save(slot_mapping slot_mapping = , token_ids = token_ids, mask = mask, option = option)
        res = cc.get_result(fut) 
        print("async_save(token) result:", res)
    except EmsException as e: 
        print(f"async_save(token) failed: {e}")
    # 异步读取,获取结果
    try: 
        fut = cc.async_load(slot_mapping slot_mapping = , token_ids = token_ids, mask = mask, option = option)
        res = cc.get_result(fut) 
        print("async_load(token) result:", res)
    except EmsException as e: 
        print(f"async_load(token) failed: {e}")

相关文档