> 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