Python Glossary English

Python 3.8+pickleпонятие

pickle.PickleBuffer

внешние буферы

Обёртка над буфером (bytes, bytearray, memoryview), позволяющая протоколу 5 передавать большие данные вне основного потока pickle без копирования.

Синтаксис

pickle.dumps(pickle.PickleBuffer(buf), protocol=5, buffer_callback=callback)

Инструмент для авторов библиотек вроде NumPy, а не для повседневного кода. Работает только с protocol=5: на младших протоколах dumps поднимет PicklingError. Без buffer_callback буфер просто копируется внутрь pickle; с ним он отдаётся колбэку отдельно, и загрузить такие данные можно только loads(data, buffers=...), иначе UnpicklingError. Загрузка, как и у всего pickle, исполняет код из данных — только доверенный источник.

Примеры

import pickle
data = bytearray(b'big payload')
side = []
blob = pickle.dumps(pickle.PickleBuffer(data), protocol=5, buffer_callback=side.append)
print(len(side))  # → 1
print(bytes(pickle.loads(blob, buffers=side)))  # → b'big payload'
try:
    pickle.loads(blob)
except pickle.UnpicklingError as e:
    print(type(e).__name__)  # → UnpicklingError

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности