[Python-ideas] PEP 3156: Transport.sendfile

Nikolay Kim fafhrd91 at gmail.com
Fri Jan 25 21:25:50 CET 2013


On Jan 25, 2013, at 12:04 PM, Guido van Rossum <guido at python.org> wrote:

> On Fri, Jan 25, 2013 at 10:11 AM, Nikolay Kim <fafhrd91 at gmail.com> wrote:
> 
> On Jan 25, 2013, at 10:08 AM, Guido van Rossum <guido at python.org> wrote:
> 
>> On Fri, Jan 25, 2013 at 10:03 AM, Nikolay Kim <fafhrd91 at gmail.com> wrote:
>> 
>> I think Transport needs 'sendfile' api, something like:
>> 
>>    @tasks.coroutine
>>    def sendfile(self, fd, offset, nbytes):
>>       ….
>> 
>> otherwise it is impossible to implement sendfile without breaking transport encapsulation
>>  
>> Really? Can't the user write this themselves? What's wrong with this:
>> 
>> while True:
>>   data = os.read(fd, 16*1024)
>>   if not data: break
>>   transport.write(data)
>> 
>> (Perhaps augmented with a way to respond to pause() requests.)
> 
> i mean 'os.sendfile()', zero-copy sendfile.
> 
> I see (http://docs.python.org/dev/library/os.html#os.sendfile).
> 
> Hm, that function is so platform-specific that we might as well force users to do it this way:
> 
> sock = transport.get_extra_info("socket")
> if sock is not None:
>   os.sendfile(sock.fileno(), ......)
> else:
>   <use write() like I suggested above>

there should some kind of way to flush write buffer or write callbacks. 

sock = transport.get_extra_info("socket")
if sock is not None:
   os.sendfile(sock.fileno(), ......)
else:
   yield from transport.write_buffer_flush()
   <use of write() method>



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20130125/b20e1203/attachment.html>


More information about the Python-ideas mailing list