python snippets

Ring Buffer By Python

之前工作有用到过一个叫watchdog的python脚本,其工作过程中会循环地调用llinux系统的ps命令,来查询业务程序是否存活(后来还改进了一下,业务程序存在启动但是未能正常工作的可能,还需要监听一下端口是否开启)。同时我还想让这个脚本,能监视多个程序,如果程序挂掉,除了使用subprocess模块重启外,还能有一些其他自定义的callback:比如给监控汇聚器发送一个数据包,用于数据库存储与触发警报。
其实就是一个轻量的supervisor(https://github.com/Supervisor/supervisor)。
但在如何循环监听这个地方,以我目前浅薄的知识积累,好像python并没有一个环形缓存能储存python对象。(如果用go语言有个container/ring)
于是我在google搜索了一下,找到这么一篇文章
Implementing a Ring Buffer(https://www.safaribooksonline.com/library/view/python-cookbook/0596001673/ch05s19.html)研究了一下其实现过程,然后添加了个遍历的方法。代码如下

class RingBuffer:

    t = int(0)

    def __init__(self,size):
        self.size = size
        self.data = []

    class _Full:
        def append(self, ele):
            self.data[self.cur] = ele
            self.cur = (self.cur + 1) % self.size

        def get(self):
            return self.data[self.cur:] + self.data[:self.cur]

        def traverse(self):
            datalen = min(len(self.data), self.size)
            show_ele = self.data[self.t]
            self.t += 1
            if self.t >= datalen:
                self.t = int(0)
            return show_ele

    def append(self,ele):
        self.data.append(ele)
        if len(self.data) == self.size:
            self.cur = 0
            self.__class__ = self._Full


    def get(self):
        return self.data

    def traverse(self):
        datalen = min(len(self.data), self.size)
        show_ele = self.data[self.t]
        self.t += 1
        if self.t >= datalen:
            self.t = int(0)
        return show_ele

这样就实现了一个可以定义对象存储数量,新数据会overwrite最早的数据的缓存。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,597评论 6 427
  • Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资...
    Clemente阅读 3,282评论 0 54
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,791评论 4 418
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,856评论 1 61
  • 才发现,原来,你是那个稍微懂我的人。难道是因为你学的是心理学? 她说:我从以前起就觉得,你不开心 你笑的时候是有一...
    3e9d876524af阅读 174评论 0 1