pickle.load() extremely slow performance

Jim Garrison jhg at acm.org
Fri Mar 20 20:39:41 EDT 2009


Jim Garrison wrote:
> John Machin wrote:
[snip]
>> Have you considered using cPickle instead of pickle?
>> Have you considered using *ickle.dump(..., protocol=-1) ?
> 
> I'm using Python 3 on Windows (Server 2003).  According to the docs
> 
>    "The pickle module has an transparent optimizer (_pickle) written
>    in C. It is used whenever available. Otherwise the pure Python
>    implementation is used."
> 
> How can I tell if _pickle is being used?

Answered my own question

 >>> import _pickle
 >>> dir (_pickle)
 ['PickleError', 'Pickler', 'PicklingError', 'Unpickler',
 'UnpicklingError', '__doc__', '__name__', '__package__']
 >>> dir(_pickle.Pickler)
 ['__class__', '__delattr__', '__doc__', '__eq__', '__format__',
 '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
 '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
 '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
 'bin', 'clear_memo', 'dump', 'fast', 'memo', 'persistent_id']
 >>> dir(_pickle.Pickler)
 ['__class__', '__delattr__', '__doc__', '__eq__', '__format__',
 '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
 '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
 '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
 'bin', 'clear_memo', 'dump', 'fast', 'memo', 'persistent_id']

_pickle seems to be there.  Also, if I step into the load
call (pydev under Eclipse) it steps into pickle.load() but
won't step into the call to the Unpickler constructor.  I
assume that means it's calling out to the C implementation.



More information about the Python-list mailing list