[Python-3000] pre-PEP: Enhancing buffer protocol (tp_as_buffer)

Travis Oliphant oliphant.travis at ieee.org
Mon Feb 26 19:53:35 CET 2007


> 
>>   2. There is no way for a consumer to tell the protocol-exporting 
>>object it is "finished" with its view of the memory and therefore no way 
>>for the object to be sure that it can reallocate the pointer to the 
>>memory that it owns (the array object reallocating its memory after 
>>sharing it with the buffer object led to the infamous buffer-object 
>>problem).
> 
>
> I'm a bit worried about having a get/release kind of thing
> in the protocol, because it risks forcing all objects which
> implement the protocol to provide some kind of refcounting
> and locking mechanism for their data. Some objects may not
> be able to do that easily or efficiently, especially if
> they're wrapping some external library that has no such
> notion.

If they can't do it easily, then they don't have to define the 
release-function and Python will never call it.

> 
> 
>>All that is needed is to create a Python "memory_view" object that can 
>>contain all the information needed and be returned when the buffer 
>>protocol is called --- when it is garbage-collected, the 
>>"bp_release_view" function is called on the exporting object.
> 
> 
> That sounds too heavyweight. Getting a memory view through
> this protocol should be a very lightweight operation -- ideally
> it shouldn't require allocating any memory at all, and it
> certainly shouldn't require creating a Python object.

If you want shape information you are going to have to allocate memory. 
   If you are going to do that you might as well return a Python object 
so you can manage this memory easily.

If you don't want or need shape or detailed type information, I could 
also see and have no objection to keeping a lightweight version of the 
protocol that only returns simple integers.

I'll put that in the PEP.

-Travis



More information about the Python-3000 mailing list