[Doc-SIG] Building Python Document 30% faster.

Michael Foord fuzzyman at voidspace.org.uk
Sat Apr 4 16:56:38 CEST 2009


Hello,

There is a docutils specific mailing list:

docutils users <docutils-users at lists.sourceforge.net>

You will need to subscribe from sourceforge, or you can just post your 
patch on sourceforge:

http://docutils.sf.net

Another patch was recently submitted by Georg Brandl offering a similar 
speedup. No idea if it is in the same area or not.

All the best,


Michael Foord

稲田直哉 wrote:
> Hi, all.
>
> I'm a member of Japanese translate of Python document Project.
> We complete translating Python 2.5 document last year and now
> work for Python 2.6 Document.
>
> I feel building document is slow a little. So I try to tune docutils
> and Sphinx.
>
> Attached patches make building document 30% faster.
> (In my environ. 330sec -> 220sec roughly)
>
> I post sphinx.patch to bitbucket, but I don't know where to post docutils.patch.
> Could anyone review these patch?
>
> These patches changes following:
>
> 1. Use PyStemmer instead of PorterStemmer.
> PorterStemmer is implemented Python and consumes about 50seconds
> during buid.
> PyStemmer <http://pypi.python.org/pypi/PyStemmer/1.0.1> implemented in C
> and consumes only 7 seconds.
>
> But searchindex.js with PyStemmer is different to one with PorterStemmer.
>
> 2. Avoid building OptionParser many times.
> Sphinx uses docutils.core.publish_parts() without `settings` argument
> many times.
> This causes building docutils.frontend.OptionParser many times and consumes
> 29 seconds.
>
> 3. Avoid building NestedStateMachine many times.
> NestedStateMachine is built and destroyed many times.
> Recycling that SM make significant performance gain.
>
> == before ==
>    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
> 25720/459    0.997    0.000  134.085    0.292
> tools/docutils/statemachine.py:178(run)
> 92281/1513    1.420    0.000  133.935    0.089
> tools/docutils/statemachine.py:384(check_line)
>     25720    0.184    0.000   89.628    0.003
> tools/docutils/statemachine.py:129(__init__)
>     25720    0.632    0.000   89.444    0.003
> tools/docutils/statemachine.py:448(add_states)
>    385800    1.665    0.000   88.813    0.000
> tools/docutils/statemachine.py:436(add_state)
>    385800    2.356    0.000   85.287    0.000
> tools/docutils/statemachine.py:928(__init__)
>    385800    1.793    0.000   82.931    0.000
> tools/docutils/statemachine.py:566(__init__)
>
> == after ==
>    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
> 25720/459    1.051    0.000   68.175    0.149
> tools/docutils/statemachine.py:178(run)
> 92281/1513    1.405    0.000   68.024    0.045
> tools/docutils/statemachine.py:384(check_line)
>      6862    0.031    0.000   24.241    0.004
> tools/docutils/statemachine.py:129(__init__)
>      6862    0.174    0.000   24.210    0.004
> tools/docutils/statemachine.py:448(add_states)
>    102930    0.430    0.000   24.036    0.000
> tools/docutils/statemachine.py:436(add_state)
>    102930    0.633    0.000   23.162    0.000
> tools/docutils/statemachine.py:928(__init__)
>    102930    0.549    0.000   22.529    0.000
> tools/docutils/statemachine.py:566(__init__)
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Doc-SIG maillist  -  Doc-SIG at python.org
> http://mail.python.org/mailman/listinfo/doc-sig
>   


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog




More information about the Doc-SIG mailing list