Issue #14335: multiprocessing's custom Pickler subclass now inherits from the C-accelerated implementation.

Patch by sbt.
This commit is contained in:
Antoine Pitrou 2012-03-17 00:23:04 +01:00
parent d656958915
commit 846fd302a0
2 changed files with 12 additions and 9 deletions

View File

@ -55,18 +55,18 @@ def assert_spawning(self):
# Try making some callable types picklable # Try making some callable types picklable
# #
from pickle import _Pickler as Pickler from pickle import Pickler
from copyreg import dispatch_table
class ForkingPickler(Pickler): class ForkingPickler(Pickler):
dispatch = Pickler.dispatch.copy() _extra_reducers = {}
def __init__(self, *args):
Pickler.__init__(self, *args)
self.dispatch_table = dispatch_table.copy()
self.dispatch_table.update(self._extra_reducers)
@classmethod @classmethod
def register(cls, type, reduce): def register(cls, type, reduce):
def dispatcher(self, obj): cls._extra_reducers[type] = reduce
rv = reduce(obj)
if isinstance(rv, str):
self.save_global(obj, rv)
else:
self.save_reduce(obj=obj, *rv)
cls.dispatch[type] = dispatcher
def _reduce_method(m): def _reduce_method(m):
if m.__self__ is None: if m.__self__ is None:

View File

@ -27,6 +27,9 @@ Core and Builtins
Library Library
------- -------
- Issue #14335: multiprocessing's custom Pickler subclass now inherits from
the C-accelerated implementation. Patch by sbt.
- Issue #10484: Fix the CGIHTTPServer's PATH_INFO handling problem. - Issue #10484: Fix the CGIHTTPServer's PATH_INFO handling problem.
- Issue #11199: Fix the with urllib which hangs on particular ftp urls. - Issue #11199: Fix the with urllib which hangs on particular ftp urls.