Прямо сейчас я буферирую байты, используя строки, StringIO или cStringIO. Но мне часто нужно удалять байты с левой стороны буфера. Наивный подход перестроил бы весь буфер. Есть ли оптимальный способ сделать это, если усечение слева является очень распространенной операцией? Сборщик мусора в Python должен на самом деле собирать усеченные байты.
Любой алгоритм для этого (хранить буфер небольшими частями?) Или существующая реализация действительно помогли бы.
Edit:
Я пытался использовать для этого представление памяти Python 2.7, но, к сожалению, данные вне «представления» не GCed при удалении исходной ссылки:
# (This will use ~2GB of memory, not 50MB)
memoryview # Requires Python 2.7+
smalls = []
for i in xrange(10):
big = memoryview('z'*(200*1000*1000))
small = big[195*1000*1000:]
del big
smalls.append(small)
print '.',