On Mon, Oct 19, 2015 at 11:35 AM, David Mertz <me...@gnosis.cx> wrote:
> That's interesting about the `self._full` variable slowing it down, I think
> I'm not surprised (but obviously it depends on just how it's used).  But one
> can also simply define RingBuffer.isfull() using `self.max==len(self.data)`
> if you prefer that approach.  I doubt `myringbuffer.isfull()` is something
> you need to call in an inner loop.
>
> That said, I think my implementation of RingBuffer would probably look more
> like (completely untested):
>
> class RingBuffer(object):
>     def __init__(self, size_max):
>         self.data = [None] * size_max
>         self.size_max = size_max
>         self.used = 0
>         self.cur = 0
>     def append(self, val):
>         self.data[self.cur] = val
>         self.cur = (self.cur+1) % self.size_max
>         self.used = max(self.used, self.cur+1)
>     def isfull(self):
>         self.used == self.size_max
>
> Feel free to try this version against whatever benchmark you have in mind.

What does this provide that collections.deque(maxlen=size_max)
doesn't? I'm a little lost.

ChrisA
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to