A "bug" in inspect.findsource

Joonas Paalasmaa joonas at olen.to
Fri Jan 11 21:39:40 CET 2002


Fernando Pérez wrote:
> 
> [snipped]
> 
> Why don't you submit it as a patch? Just go to sourceforge and put it in.
> That's how python gets better...

Because I think that the tokenizer solution is too slow. Below are shown
some test
results that are claiming, that the tokenizer version runs over 7 times
slower than the
original. What do you think? Should I suggest a patch?

Python 2.2 (#28, Dec 21 2001, 12:21:22) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import profile, inspect, inspect2, cgi
>>> profile.run("inspect.findsource(cgi.FormContent)")
         138 function calls (134 primitive calls) in 0.327 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.001    0.001    0.200    0.200 <string>:1(?)
        1    0.000    0.000    0.000    0.000 inspect.py:279(getfile)
        1    0.001    0.001    0.002    0.002
inspect.py:318(getsourcefile)
        2    0.000    0.000    0.000    0.000 inspect.py:33(ismodule)
        1    0.159    0.159    0.198    0.198 inspect.py:368(findsource)
        2    0.000    0.000    0.000    0.000 inspect.py:41(isclass)
        1    0.001    0.001    0.001    0.001 ntpath.py:244(exists)
        1    0.127    0.127    0.327    0.327
profile:0(inspect.findsource(cgi
.FormContent))
        0    0.000             0.000          profile:0(profiler)
        1    0.000    0.000    0.037    0.037 sre.py:176(compile)
        1    0.000    0.000    0.036    0.036 sre.py:215(_compile)
        2    0.000    0.000    0.001    0.000
sre_compile.py:145(_compile_charse
t)
        2    0.000    0.000    0.000    0.000
sre_compile.py:174(_optimize_chars
et)
      3/1    0.018    0.006    0.020    0.020
sre_compile.py:21(_compile)
        2    0.000    0.000    0.001    0.000
sre_compile.py:293(_simple)
        1    0.000    0.000    0.002    0.002
sre_compile.py:300(_compile_info)
        1    0.000    0.000    0.022    0.022 sre_compile.py:409(_code)
        1    0.000    0.000    0.036    0.036
sre_compile.py:424(compile)
        8    0.000    0.000    0.000    0.000 sre_parse.py:133(__len__)
       10    0.000    0.000    0.000    0.000
sre_parse.py:137(__getitem__)
        2    0.000    0.000    0.000    0.000
sre_parse.py:139(__setitem__)
        2    0.000    0.000    0.000    0.000
sre_parse.py:141(__getslice__)
       20    0.001    0.000    0.001    0.000 sre_parse.py:145(append)
      5/3    0.002    0.000    0.002    0.001 sre_parse.py:147(getwidth)
        1    0.000    0.000    0.000    0.000 sre_parse.py:183(__init__)
       25    0.002    0.000    0.002    0.000 sre_parse.py:187(__next)
        3    0.000    0.000    0.000    0.000 sre_parse.py:200(match)
       24    0.003    0.000    0.005    0.000 sre_parse.py:206(get)
        3    0.000    0.000    0.000    0.000 sre_parse.py:269(_escape)
        1    0.000    0.000    0.013    0.013
sre_parse.py:313(_parse_sub)
        1    0.006    0.006    0.013    0.013 sre_parse.py:368(_parse)
        1    0.000    0.000    0.014    0.014 sre_parse.py:613(parse)
        1    0.000    0.000    0.000    0.000 sre_parse.py:75(__init__)
        3    0.000    0.000    0.000    0.000 sre_parse.py:98(__init__)
        4    0.000    0.000    0.000    0.000 string.py:48(lower)

>>> profile.run("inspect2.findsource(cgi.FormContent)")
         4105 function calls in 2.441 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.023    0.023    2.237    2.237 <string>:1(?)
        1    0.025    0.025    0.025    0.025 inspect2.py:279(getfile)
        1    0.062    0.062    0.176    0.176
inspect2.py:318(getsourcefile)
        2    0.000    0.000    0.000    0.000 inspect2.py:33(ismodule)
        1    0.834    0.834    2.215    2.215
inspect2.py:368(findsource)
        2    0.000    0.000    0.000    0.000 inspect2.py:41(isclass)
        1    0.089    0.089    0.089    0.089 ntpath.py:244(exists)
        1    0.203    0.203    2.441    2.441
profile:0(inspect2.findsource(cgi
.FormContent))
        0    0.000             0.000          profile:0(profiler)
        4    0.000    0.000    0.000    0.000 string.py:48(lower)
     4091    1.205    0.000    1.205    0.000
tokenize.py:135(generate_tokens)



More information about the Python-list mailing list