From 846fd302a0155ca6d277cb274ca6c39d08860013 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 17 Mar 2012 00:23:04 +0100 Subject: Issue #14335: multiprocessing's custom Pickler subclass now inherits from the C-accelerated implementation. Patch by sbt. --- Lib/multiprocessing/forking.py | 18 +++++++++--------- Misc/NEWS | 3 +++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Lib/multiprocessing/forking.py b/Lib/multiprocessing/forking.py index b7de567..020508a 100644 --- a/Lib/multiprocessing/forking.py +++ b/Lib/multiprocessing/forking.py @@ -55,18 +55,18 @@ def assert_spawning(self): # Try making some callable types picklable # -from pickle import _Pickler as Pickler +from pickle import Pickler +from copyreg import dispatch_table + 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 def register(cls, type, reduce): - def dispatcher(self, obj): - rv = reduce(obj) - if isinstance(rv, str): - self.save_global(obj, rv) - else: - self.save_reduce(obj=obj, *rv) - cls.dispatch[type] = dispatcher + cls._extra_reducers[type] = reduce def _reduce_method(m): if m.__self__ is None: diff --git a/Misc/NEWS b/Misc/NEWS index 470ab42..5672fc31 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -27,6 +27,9 @@ Core and Builtins 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 #11199: Fix the with urllib which hangs on particular ftp urls. -- cgit v0.12