[Python-Dev] 2.5 slower than 2.4 for some things? (original) (raw)

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 plextest2.py 0.710999965668 E:\Plex-1.1.5>py25 plextest2.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 plextest2.py 0.401000022888 E:\Plex-1.1.5>py25 plextest2.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