python disk i/o speed

Jeff Epler jepler at unpythonic.net
Wed Aug 7 10:40:10 EDT 2002


On Wed, Aug 07, 2002 at 07:21:28AM -0700, nnes wrote:
> I generated a file about 7MB long, with 3 numbers on each line. Then I
> wrote a programm in python, java and ANSI C, generating a second file
> based on the first one, with 4 numbers; the original 3 plus the sum of
> these.
> e.g. "2","5","1" ----> "2","5","1","8"
[...]
> I wondered about the reason of almost 10 times the difference from c
> to python since the programms should be mostly I/O bound and not CPU
> bound. Is there also a way of improving the speed for python in this
> situation? If sombody wants to make comments on the c and the java
> code it would be ok also, since I am not an expert programmer.

On any modern machine, reading a 7MB file a second time will not be "I/O
bound", because it will be in cache, and should be read at nearly the
speed of memcpy(), if not mmap().

BTW, here's my attempt at a Python program.  Not having your programs, I
can't compare performance:

import sys, re

pat = re.compile('"([\d]+)","([\d]+)","([\d]+)"')
for line in sys.stdin:
    match = pat.match(line)
#   if not match:
#       sys.stdout.write(line)
    a, b, c = map(int, match.group(1, 2, 3))
    sys.stdout.write('"%s","%s","%s","%s"\n' % (a,b,c, a+b+c))

Remember that you can shave another ~5% off of Python runtime by using
'python -O'.  Also, you could attempt to measure the startup time, which
is likely to be smaller for C, and larger for Python and Java.

Jeff




More information about the Python-list mailing list