Switched to the hotshot profiler instead of profile. The hotshot profile is better than profile. Made two changes, one to delay reading a notebooks configuration until something actually needs something out of it. Second change is storing the order of the blogs in a seperate file. This avoids NewsBruiser reading the order from each blog.
The hotshot profiler produces different results. A profile before above changes:
77867 function calls (75825 primitive calls) in 0.905 CPU seconds
Ordered by: internal time, call count
List reduced from 856 to 100 due to restriction
ncalls tottime percall cumtime percall filename:lineno(function)
139 0.179 0.001 0.347 0.002 Notebook.py:626(readConfiguration)
1 0.062 0.062 0.165 0.165 core.py:15(?)
3 0.062 0.021 0.063 0.021 __init__.py:9(?)
86 0.058 0.001 0.506 0.006 NBConfig.py:156(__registerPluginDir)
15078 0.057 0.000 0.057 0.000 string.py:351(find)
402/71 0.039 0.000 0.095 0.001 sre_parse.py:374(_parse)
26 0.039 0.001 0.481 0.019 __init__.py:1(?)
6459 0.038 0.000 0.049 0.000 util.py:59(replaceBaseURLs)
6526 0.031 0.000 0.048 0.000 IWantOptions.py:154(getOption)
And after:
28853 function calls (26806 primitive calls) in 0.467 CPU seconds
Ordered by: internal time, call count
List reduced from 856 to 100 due to restriction
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.060 0.060 0.077 0.077 drv_libxml2.py:35(?)
402/71 0.040 0.000 0.106 0.001 sre_parse.py:374(_parse)
1 0.037 0.037 0.114 0.114 saxexts.py:41(_create_parser)
26 0.020 0.001 0.697 0.027 __init__.py:1(?)
1 0.019 0.019 0.312 0.312 feedparser.py:12(?)
747/67 0.018 0.000 0.038 0.001 sre_compile.py:27(_compile)
3541 0.017 0.000 0.025 0.000 sre_parse.py:201(get)
3 0.016 0.005 0.065 0.022 __init__.py:3(?)
1 0.015 0.015 0.051 0.051 cookielib.py:26(?)
Have to do a little work before I can commit this. I need to ensure the cache file will be saved whenever the order changes (or a new blog is added). Also need to rest it on Python 2.2 (version on the server). Still pretty good for a 120 line patch (large part consists of indenting changes and some debugging code).
Update: Patch has been committed.
