data.buffer.buffer¶
缓冲区¶
缓冲区¶
- class ding.data.buffer.buffer.Buffer(size: int)[source]¶
Buffer是设备存储、第三方服务或数据结构的抽象, 例如,内存队列、sum-tree、redis或di-store。
- abstract get(idx: int) BufferedData[source]¶
- Overview:
通过下标索引获取项目
- Arguments:
idx (
int): 下标索引
- Returns:
缓冲数据 (
BufferedData): 来自缓冲区的项目
- abstract push(data: Any, meta: dict | None = None) BufferedData[source]¶
- Overview:
将数据及其元信息推入缓冲区。
- Arguments:
数据 (
Any): 将被推入缓冲区的数据。meta (
dict): 元信息,例如优先级、计数、陈旧度。
- Returns:
buffered_data (
BufferedData): 推送的数据。
- abstract sample(size: int | None = None, indices: List[str] | None = None, replace: bool = False, sample_range: slice | None = None, ignore_insufficient: bool = False, groupby: str | None = None, unroll_len: int | None = None) List[BufferedData] | List[List[BufferedData]][来源]¶
- Overview:
样本数据长度为
size。- Arguments:
size (
Optional[int]): 将要采样的数据数量。索引 (
Optional[List[str]]): 包含多个索引的样本。replace (
bool): 如果使用replace为true,您可能会从缓冲区接收到重复的数据。sample_range (
slice): 样本范围切片。- ignore_insufficient (
bool): If ignore_insufficient is true, sampling more than buffer size 没有重复不会导致异常。
- ignore_insufficient (
groupby (
Optional[str]): 元数据中的分组键,即 groupby=”episode”unroll_len (
Optional[int]): 组内连续帧的数量。
- Returns:
- sample_data (
Union[List[BufferedData], List[List[BufferedData]]]): 一个长度为
size的数据列表,如果设置了groupby,可能会嵌套。
- sample_data (
- abstract update(index: str, data: Any | None = None, meta: dict | None = None) bool[source]¶
- Overview:
通过索引更新数据和元数据
- Arguments:
索引 (
str): 数据的索引。数据 (
any): 纯数据。meta (
dict): 元信息。
- Returns:
成功 (
bool): 是否成功,如果缓冲区中不存在具有该索引的数据,则返回 false。
- use(func: Callable) Buffer[source]¶
- Overview:
使用算法中间件来修改缓冲区的行为。 每个中间件应该是一个可调用的函数,它将接收三个参数部分,包括: 1. 缓冲区实例,您可以使用此实例访问缓冲区的所有内容,包括存储。 2. 用户调用的函数,有三个方法名为push、sample和clear,因此您可以使用这些函数名来决定选择哪个操作。 3. 用户传递给原始函数的剩余参数,将通过*args传递。
每个中间件处理程序应返回两部分值,包括: 1. 第一个值是done(True或False),如果done==True,中间件链将立即停止,本次执行期间不会执行更多的中间件 2. 剩余的值将传递给下一个中间件或缓冲区中的默认函数。
- Arguments:
func (
Callable): 中间件处理程序
- Returns:
buffer (
Buffer): 实例自身