[Python-Dev] Performance of various marshallers

Skip Montanaro skip@pobox.com (Skip Montanaro)
Mon, 1 Oct 2001 22:06:04 -0500


 > total test time (approximately 5 seconds).  Each test was run 3 times.  The
 > largest number is recorded below, rounded to three significant digits.
 > 
 >                         encode          decode
 >                         ------          ------
 >     marshal             25900           7830
 >     cPickle              1230            149

  Were the cPickle tests run in binary or original flavor?

I wasn't aware of a "binary flavor".  It's not mentioned in the online docs.
I just called cPickle.dumps or cPickle.loads as appropriate.  It looks like
I should call them with a second binary flag.  

 >     xmlrpclib 0.9.8
 >         w/ sgmlop         416            107
 >         w/o sgmlop        415             16.3  <--+
 >     xmlrpclib 1.0b4                                |
 >         w/ sgmlop         365             92.0     |
 >         w/o sgmlop        363             74.9  <--+
 >     py-xmlrpc            2780           2260       |
                                                      |
  +---------------------------------------------------+
  |
  +----> I presume that Expat was available for the second run and not
         for the first?  These should probably be broken into three
         categories: sgmlop, expat, and xmllib.

In 0.9.8 there are two parsers, fast (with sgmlop) and slow (without).  I
believe the ExpatParser was used in the second version.  It doesn't really
matter to me because they are all perform so abysmally.

         I also presume that py-xmlrpc never calls from C->Python
         during the parse phase, but I've not yet had a chance to look
         at this code.

I don't know.  I've not looked at the code, only the output.  I have cc'd
Shilad Sen on this thread.  He should be able to tell us how py-xmlrpc gets
such good performance.

Skip