現在、文字列、StringIO、または cStringIO を使用してバイトをバッファリングしています。しかし、多くの場合、バッファーの左側からバイトを削除する必要があります。単純なアプローチでは、バッファ全体が再構築されます。左切り捨てが非常に一般的な操作である場合、これを行う最適な方法はありますか? Python のガベージ コレクターは、切り捨てられたバイトを実際に GC する必要があります。
これのためのアルゴリズム(バッファを小さな断片に保ちますか?)、または既存の実装が本当に役に立ちます。
編集:
これには Python 2.7 のメモリビューを使用しようとしましたが、残念ながら、元の参照が削除されると、「ビュー」の外側のデータは GC されません。
# (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 '.',