urllib2 performance on windows, usb connection

dq dq at gmail.com
Fri Feb 6 17:35:58 EST 2009


MRAB wrote:
> dq wrote:
>  > Martin v. Löwis wrote:
>  >>> So does anyone know what the deal is with this?  Why is the same 
> code so
>  >>> much slower on Windows?  Hope someone can tell me before a holy war
>  >>> erupts :-)
>  >>
>  >> Only the holy war can give an answer here. It certainly has 
> *nothing* to
>  >> do with Python; Python calls the operating system functions to read 
> from
>  >> the network and write to the disk almost directly. So it must be the
>  >> operating system itself that slows it down.
>  >>
>  >> To investigate further, you might drop the write operating, and measure
>  >> only source.read(). If that is slower, then, for some reason, the
>  >> network speed is bad on Windows. Maybe you have the network interfaces
>  >> misconfigured? Maybe you are using wireless on Windows, but cable on
>  >> Linux? Maybe you have some network filtering software running on
>  >> Windows? Maybe it's just that Windows sucks?-)
>  >>
>  >> If the network read speed is fine, but writing slows down, I ask the
>  >> same questions. Perhaps you have some virus scanner installed that
>  >> filters all write operations? Maybe Windows sucks?
>  >>
>  >> Regards,
>  >> Martin
>  >>
>  >
>  > Thanks for the ideas, Martin.  I ran a couple of experiments to find the
>  > culprit, by downloading the same 20 MB file from the same fast server. I
>  > compared:
>  >
>  > 1.  DL to HD vs USB iPod.
>  > 2.  AV on-access protection on vs. off
>  > 3.  "source. read()" only vs.  "file.write( source.read() )"
>  >
>  > The culprit is definitely the write speed on the iPod.  That is,
>  > everything runs plenty fast (~1 MB/s down) as long as I'm not writing
>  > directly to the iPod.  This is kind of odd, because if I copy the file
>  > over from the HD to the iPod using windows (drag-n-drop), it takes about
>  > a second or two, so about 10 MB/s.
>  >
>  > So the problem is definitely partially Windows, but it also seems that
>  > Python's file.write() function is not without blame.  It's the
>  > combination of Windows, iPod and Python's data stream that is slowing me
>  > down.
>  >
>  > I'm not really sure what I can do about this.  I'll experiment a little
>  > more and see if there's any way around this bottleneck.  If anyone has
>  > run into a problem like this, I'd love to hear about it...
>  >
> You could try copying the file to the iPod using the command line, or
> copying data from disk to iPod in, say, C, anything but Python. This
> would allow you to identify whether Python itself has anything to do
> with it.

Well, I think I've partially identified the problem.  target.write( 
source.read() ) runs perfectly fast, copies 20 megs in about a second, 
from HD to iPod.  However, if I run the same code in a while loop, using 
a certain block size, say target.write( source.read(4096) ), it takes 
forever (or at least I'm still timing it while I write this post).

The mismatch seems to be between urllib2's block size and the write 
speed of the iPod, I might try to tweak this a little in the code and 
see if it has any effect.

Oh, there we go:   20 megs in 135.8 seconds.  Yeah... I might want to 
try to improve that...



More information about the Python-list mailing list