Я пытаюсь создать кольцевой буфер в Python.Моя лучшая реализация заключается в использовании deque
с фиксированной длиной.
(базовая реализация)
class RingBuffer(object):
def __init__(self, size):
self.mutex = Lock()
self.deque = collections.deque(maxlen=size)
def push_elem(self, element):
copy.deepcopy(element)
with self.mutex:
self.deque.append(element)
def get_data(self, event, callback=None):
with self.mutex:
return copy.deepcopy(list(self.deque))
def get_elem(self):
if self.deque:
with self.mutex:
return cp.deepcopy(self.deque[-1])
return None
Я знаю, что добавление и удаление элементов с обеих сторон является потокобезопасным, но я также должен иметь возможностьскопировать N-количество элементов.Вот почему я использую этот мьютекс.
Проблема в том, что я не хочу блокировать вставку новых элементов, пока какой-то другой поток копирует данные в буфер.
Есть лиспособ добиться этого поведения без мьютекса?