理解Python中的RingBuffer环形缓冲区
ringbuffer
Refered from Wikipedia, a ring buffer(环形缓冲区 or circular buffer, circular queue, cyclic buffer) is a data strcture that uses a single, fixed-size buffer as if it were connected end-to-end.
This structure lends itself easily to buffering data streams.
buffer
First, we should know what the “BUFFER” is in computer science.
However, a buffer may be used when moving data between processes within a computer.
LMAX Disruptor 中 ringbuffer
LMAX是伦敦多元资产交易所的简称,https://www.lmax.com/
其开源的LMAX Disruptor可以处理数百万订单/秒。ringbuffer是其一大利器。
Python中实现ringbuffer
网上相关资料不多。
自己实现
class RingBuffer:def __init__(self, size):self.data = [None for i in range(size)]def append(self, x):self.data.pop(0) # remove the last one which index = -1self.data.append(x) # add at the index = -1def get(self):return self.databuf = RingBuffer(4) for i in range(10):buf.append(i)print(buf.get())
Python Cookbook by Alex Martelli, David Ascher 中有一种相对完善的实现:
class RingBuffer:""" class that implements a not-yet-full buffer """def __init__(self,size_max):self.max = size_maxself.data = []class __Full:""" class that implements a full buffer """def append(self, x):""" Append an element overwriting the oldest one. """self.data[self.cur] = xself.cur = (self.cur+1) % self.maxdef get(self):""" return list of elements in correct order """return self.data[self.cur:]+self.data[:self.cur]def append(self,x):"""append an element at the end of the buffer"""self.data.append(x)if len(self.data) == self.max:self.cur = 0# Permanently change self's class from non-full to fullself._ _class_ _ = self._ _Fulldef get(self):""" Return a list of elements from the oldest to the newest. """return self.data# sample usage if _ _name_ _=='_ _main_ _':x=RingBuffer(5)x.append(1); x.append(2); x.append(3); x.append(4)print x._ _class_ _, x.get( )x.append(5)print x._ _class_ _, x.get( )x.append(6)print x.data, x.get( )x.append(7); x.append(8); x.append(9); x.append(10)print x.data, x.get( )
Python模块collections.deque
Python模块pyringbuf
References
- 剖析Disruptor:为什么会这么快?(一)Ringbuffer的特别之处
- 并发框架Disruptor译文
- disruptor - BlogsAndArticles.wiki
- Trisha’s Ramblings
理解Python中的RingBuffer环形缓冲区相关推荐
- 数据科学 IPython 笔记本 9.3 理解 Python 中的数据类型
9.3 理解 Python 中的数据类型 本节是<Python 数据科学手册>(Python Data Science Handbook)的摘录. 译者:飞龙 协议:CC BY-NC-SA ...
- python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递
python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...
- python中元组_理解python中的元组
理解 python 中的元组 引言 在 Python 中元组是这样的: 元组是是这样一种数据结构:不变的或者不可改变的(简单来说不能重新赋值) .元素的有序序列.因为元组是 不变的,所以他的数值是不能 ...
- python中继承是什么意思_如何理解Python中的继承?python入门
如何理解Python中的继承?如今,python编程语言深受企业和个人的喜爱.python开发工程师是近年来互联网行业非常热门的职业岗位之一.学习python的人除了零基础的,还有一部分是在职运维.在 ...
- python装饰器作用-理解python中的装饰器
一 什么是装饰器? 正如其名,装饰器的作用是为已经存在的对象增加额外功能(装饰),由此可使已有函数在无需代码改动的情况下增加额外功能:装饰器的本质是嵌套的函数且返回函数对象,即闭包.有关闭包的概念,可 ...
- python怎么导入包-如何理解Python中包的引入
Python的from import *和from import *,它们的功能都是将包引入使用,但是它们是怎么执行的以及为什么使用这种语法呢? 从一模块导入全部功能 from import * me ...
- 如何简单地理解Python中的if __name__ == '__main__'
如何简单地理解Python中的if __name__ == '__main__' 文章目录: 一.摘要 二. 程序入口 虽然已经知道这个具体的用法,但是这篇文章有很多细节写的还是很好,决定转载一下,日 ...
- 全面理解python中self的用法
self代表类的实例,而非类. class Test:def prt(self):print(self)print(self.__class__)t = Test() t.prt() 执行结果如下 & ...
- 解惑(三)----- 深入理解Python中的self参数和__init__(self)方法--通过类比Java语言
一.前言 在这里我想通过用Python和Java语言的类比来对Python中的self参数和__init__(self)方法做一个深入的解释.这样可以加深对self参数和__init__(self)方 ...
- 深入理解Python中的全局解释锁GIL
深入理解Python中的全局解释锁GIL 转自:https://zhuanlan.zhihu.com/p/75780308 注:本文为蜗牛学院资深讲师卿淳俊老师原创,首发自公众号https://mp. ...
最新文章
- python3教程-Python3 教程
- 移植u-boot1.1.6到友善mini2440学习笔记之环境搭建(系列之一)
- OC语言Block和协议
- 实现Profile购物车的匿名用户迁移
- 前端学习(1045):todolist本地存储加载到页面
- 学习ecshop 教程网址
- php168为什么抛弃重新开发x1,在今天518这个特别的日子里,我们经过将近一年来,日以继夜努力研发出的X1正式对外公开发布!...
- 任务47:Identity MVC:ReturnUrl实现
- asp.net基础 笔试题(全解完整答案)
- 【异常 1】什么是异常
- 【数字信号处理】基于Matlab GUI数字均衡器设计【含Matlab源码 904期】
- Android连点器(adb)
- 报告下集 |《认文识字·中文字信息精准化》报告
- 何水无鱼?何山无石?何人无父?何女无夫?何树无枝?何城无市?
- 客户体验改善计划的用户注销通知导致服务器自动重启
- 大数据项目(基于spark)--新冠疫情防控指挥作战平台项目
- 选对池塘钓大鱼([美]雷恩·吉尔森)第四章 想钓什么鱼?发现自己内在的需求...
- [CDH]企业数据仓库数据管理平台CDH6.2.1离线安装记录
- php behaviors,详解在PHP的Yii框架中使用行为Behaviors的方法
- 小程序 - 各种小程序「微信/支付宝/百度等」 - 学习/实践
热门文章
- 谈谈任务调度的四种实现方式
- php 解析lrc文件格式,音乐播放器之LRC歌词解析
- uniapp 下载视频到本地
- 虚拟机使用cheese调用摄像头黑屏问题解决
- 【前沿技术RPA】 一文学会用UiPath实现自动发送电子邮件(Email Automation)
- bigbluebutton视频直播服务器调用接口
- linux 运行.deb,Ubuntu下如何用命令行运行deb安装包
- TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head forObject Detection on Drone-captur
- 冰雪经济下,全民滑雪进入国际化的“黄金时代”
- mac打开注册机显示“您没有权限来打开应用程序