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

Neal Norwitz nnorwitz at gmail.com
Thu Jun 14 00:55:49 CEST 2007


On 6/13/07, ocean <ocean at m2.ccsnet.ne.jp> wrote:

> 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.stripdirs() > p.sortstats('cumulative') > p.printstats()

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 instancecompare() calls PyErrGivenExceptionMatches(), 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: PyExceptionInstanceCheck)

I'm curious about the speed of 2.6 (trunk). I think this should have become faster due to the introduction of fast subtype checks (he says without looking at the code).

n



More information about the Python-Dev mailing list