кольцевой буфер с numpy/ctypes

Я разрабатываю клиент, который будет получать данные [EEG] по tcp и записывать их в кольцевой буфер. Я подумал, что может быть очень удобно иметь буфер в виде массива ctypes или numpy, потому что можно создать numpy 'view' на любое место такого буфера и читать/писать/обрабатывать данные без каких-либо операций копирования. Или это вообще плохая идея?

Однако я не понимаю, как таким образом реализовать круговой буфер фиксированного размера. Предположим, я создал объект буфера, который является непрерывным в памяти. Каков наилучший способ записи данных при достижении конца буфера?

Один из возможных способов - начать перезапись (уже старых) байтов с самого начала, когда указатель записи достигнет конца массива буфера. Однако в этом случае нельзя создать (или можно?) представление numpy о некотором чанке (для обработки), поскольку часть его все еще может находиться в конце буферного массива, а другая часть уже в его начале. Я читал, что невозможно создать такие круговые срезы. Как это решить?

UPD: Спасибо всем за ответы. На случай, если кто-то тоже столкнется с такой же проблемой, вот окончательный код, который у меня получился.

6
задан dmytro 3 February 2012 в 20:19
поделиться