From 0e930389f4785f9d311b090f92057563e22b9768 Mon Sep 17 00:00:00 2001 From: tomMoral Date: Thu, 2 Jul 2020 13:37:14 +0200 Subject: [PATCH] FIX cloudpickle customization mechanism --- loky/backend/reduction.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/loky/backend/reduction.py b/loky/backend/reduction.py index 0bad5f63..d87fbdff 100644 --- a/loky/backend/reduction.py +++ b/loky/backend/reduction.py @@ -189,6 +189,10 @@ def __init__(self, writer, reducers=None, protocol=HIGHEST_PROTOCOL): self.dispatch = self._dispatch.copy() else: if getattr(self, "dispatch_table", None) is not None: + # Make sure dispatch table is an instance level field + # as it is not the case for isntance for cloudpickle1.5+ + # see joblib/loky#259 + self.dispatch_table = self.dispatch_table.copy() self.dispatch_table.update(self._dispatch_table.copy()) else: self.dispatch_table = self._dispatch_table.copy() @@ -202,10 +206,10 @@ def register(self, type, reduce_func): if sys.version_info < (3,): # Python 2 pickler dispatching is not explicitly customizable. # Let us use a closure to workaround this limitation. - def dispatcher(self, obj): - reduced = reduce_func(obj) - self.save_reduce(obj=obj, *reduced) - self.dispatch[type] = dispatcher + def dispatcher(self, obj): + reduced = reduce_func(obj) + self.save_reduce(obj=obj, *reduced) + self.dispatch[type] = dispatcher else: self.dispatch_table[type] = reduce_func