[Python-ideas] Addition to I/O stack: send()

Giovanni Bajo rasky at develer.com
Sat Apr 18 18:05:13 CEST 2009


Hello,

currently, Python has no builtin way to "copy a file object into 
another", an operation commonly referred to as "send". I think this would 
be a good addition to the I/O stack.

To make things clearer, this is pseudo-code of what I meant:

   def send(self, out):
       while 1:
           data = self.read(4096)
           if not data:
               break
           out.write(data)


I'll notice that the implementation can be tweaked in different ways:

 * Some operating systems do support this operation natively (through 
syscalls like "sendfile"), which is faster because the data does not 
roundtrips to user space. This is useful eg. for webservers serving files 
to network.

 * In the user-space implementation, the buffer size could match whatever 
buffer already exists for a buffered file reader (eg: BufferedIOBase and 
derivates).

Because of these different details, I think it would be a good addition 
to the I/O stack. Though, I don't fully understand it yet as to provide a 
more concrete proposals as where to put each different possible 
implementation.

Also, I'm unsure how this could couple with different kind of files 
(pipes, sockets, etc.). As far as I can tell, the new I/O stack is not 
used by the standard socket library yet, for instance.
-- 
Giovanni Bajo
Develer S.r.l.
http://www.develer.com




More information about the Python-ideas mailing list