Recently, I reviewed the documentation source for pickle and came across the following comment:
BAW: Both pickle and cPickle support something called inst_persistent_id() which appears to give unknown types a second shot at producing a persistent id. Since Jim Fulton can't remember why it was added or what it's for, I'm leaving it undocumented. I couldn't remember this and decided to dig into it and realized that this was a very useful experimental feature I added way back when cPickle was in its infancy. This is a fairly useful optimization that I never got around to evaluating. (Yeah, I know.) It is a hook, like the persistent_id hook that is called with objects to determine if they should be pickled by persistent reference. Unlike persistent_id, it isn't called for built-in types (really types for which pickle has specific handlers), like strings, numbers, lists, tuples and so on. It is only called for "instances" (types for which pickle doesn't have specific handlers). This vastly reduces the number of calls to the hook. Some tests with ZODB indicated significant improvements in pickling speed when a hook is used. If there are no objections, I'll update the Python 2 documentation to describe this and add a test. The comment above suggests that this hook is in pickle and cPickle. It is in cPickle, but was removed from pickle. I propose to add it back to pickle -- mainly for consistency with cPickle. I'll need to double check how this interacts with the type dispatching in pickle protocol 2. Any objections? Jim -- Jim Fulton Zope Corporation _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com