[Python-Dev] 2.5 slower than 2.4 for some things?
Christian K
ckkart at hoc.net
Wed Jun 13 03:15:38 CEST 2007
ocean wrote:
>> I've had a report from a user that Plex runs about half
>> as fast in 2.5 as it did in 2.4. In particular, the
>> NFA-to-DFA conversion phase, which does a lot of
>> messing about with dicts representing mappings between
>> sets of states.
That was me.
>> Does anyone in the Ministry for Making Python Blazingly
>> fast happen to know of some change that might have
>> pessimised things in this area?
>
> Hello, I investigated. On my environment, consumed time is
>
> E:\Plex-1.1.5>py24 plex_test2.py
> 0.710999965668
>
> E:\Plex-1.1.5>py25 plex_test2.py
> 0.921999931335
>
> And after I applied this patch to Plex/Machines, (make `Node' new style
> class)
>
> 62c62
> < class Node:
> ---
>> class Node(object):
>
> E:\Plex-1.1.5>py24 plex_test2.py
> 0.401000022888
>
> E:\Plex-1.1.5>py25 plex_test2.py
> 0.350999832153
>
Nice!.
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()
Christian
More information about the Python-Dev
mailing list