Pyparsing performance boost using Python 2.6b1

Paul McGuire ptmcg at austin.rr.com
Thu Jun 19 06:40:11 EDT 2008


I just ran my pyparsing unit tests with the latest Python 2.6b1
(labeled internally as Python 2.6a3 - ???), and the current 1.5.0
version of pyparsing runs with no warnings or regressions.

I was pleasantly surprised by the improved performance.  The most
complex parser I have is the Verilog parser, and I have just under 300
sample input files, so the test gets a chance to run over a range of
code and source inputs.  Here are the lines/second parsing for the
Verilog data (higher numbers are better):

 Python V2.5.1   Python V2.6b1
base
 209.2                307.0

with packrat optimization enabled
 349.8                408.0

This is a huge percentage improvement, anywhere from 15-50%!  I do not
know what it is about 2.6 that runs so much faster, but given that
packratting achieves somewhat less improvement, I would guess that the
2.6 performance comes from some optimization in making function calls,
or in GC of local variables when functions are completed (since
packratting is a form of internal memoization of parse expressions,
which thereby avoids duplicate calls to parsing functions).

Using psyco typically gives another 30-50% performance improvement,
but there is no psyco available for 2.6 yet, so I skipped those tests
for now.

-- Paul



More information about the Python-list mailing list