Потокобезопасное копирование бланка без блокировки приложения - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь создать кольцевой буфер в 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-количество элементов.Вот почему я использую этот мьютекс.
Проблема в том, что я не хочу блокировать вставку новых элементов, пока какой-то другой поток копирует данные в буфер.
Есть лиспособ добиться этого поведения без мьютекса?

...