> Meanwhile I tried to replace the parsing I did with Plex by re.Scanner.
And
> again there is a remarkable speed difference. Again python2.5 is slower:
>
> try:
>     from re import Scanner
> except:
>     from sre import Scanner
>
> pars = {}
> order = []
> count = 0
>
> def par(scanner,name):
>     global count, order, pars
>
>     if name in ['caller','e','pi']:
>         return name
>     if name not in pars.keys():
>         pars[name] = ('ns', count)
>         order.append(name)
>         ret = 'a[%d]'%count
>         count += 1
>     else:
>         ret = 'a[%d]'%(order.index(name))
>     return ret
>
> scanner = Scanner([
>     (r"x", lambda y,x: x),
>     (r"[a-zA-Z]+\.", lambda y,x: x),
>     (r"[a-z]+\(", lambda y,x: x),
>     (r"[a-zA-Z_]\w*", par),
>     (r"\d+\.\d*", lambda y,x: x),
>     (r"\d+", lambda y,x: x),
>     (r"\+|-|\*|/", lambda y,x: x),
>     (r"\s+", None),
>     (r"\)+", lambda y,x: x),
>     (r"\(+", lambda y,x: x),
>     (r",", lambda y,x: x),
>     ])
>
> import profile
> import pstats
>
> def run():
>     arg = '+amp*exp(-(x-pos)/fwhm)'
>     for i in range(100):
>         scanner.scan(arg)
>
> profile.run('run()','profscanner')
> p = pstats.Stats('profscanner')
> p.strip_dirs()
> p.sort_stats('cumulative')
> p.print_stats()

Well, I tried this script, there was no big difference.
Python2.4 0.772sec
Python2.5 0.816sec

Probably I found one reason comparation for classic style class is slower on
Python2.5.
Comparation function instance_compare() calls PyErr_GivenExceptionMatches(),
and it was just flag operation on 2.4. But on 2.5, probably related to
introduction of BaseException,
it checks inherited type tuple. (ie: PyExceptionInstance_Check)

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to