• Olivier Grisel's avatar
    bpo-31993: Do not allocate large temporary buffers in pickle dump. (#4353) · 3cd7c6e6
    Olivier Grisel yazdı
    The picklers do no longer allocate temporary memory when dumping large
    bytes and str objects into a file object. Instead the data is
    directly streamed into the underlying file object.
    
    Previously the C implementation would buffer all content and issue a
    single call to file.write() at the end of the dump. With protocol 4
    this behavior has changed to issue one call to file.write() per frame.
    
    The Python pickler with protocol 4 now dumps each frame content as a
    memoryview to an IOBytes instance that is never reused and the
    memoryview is no longer released after the call to write. This makes it
    possible for the file object to delay access to the memoryview of
    previous frames without forcing any additional memory copy as was
    already possible with the C pickler.
    3cd7c6e6
test_pickletools.py 4.23 KB