From ef4d63879b10ac032a64205768b7da68e6bcf073 Mon Sep 17 00:00:00 2001 From: "Maarten A. Breddels" Date: Wed, 14 Sep 2022 20:01:23 +0200 Subject: [PATCH] perf: avoid cross_validation_lock context manager this has a runtime overhead (about 20% faster without it) --- traitlets/traitlets.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/traitlets/traitlets.py b/traitlets/traitlets.py index d42e5be8..3758ed23 100644 --- a/traitlets/traitlets.py +++ b/traitlets/traitlets.py @@ -654,8 +654,14 @@ def get(self, obj, cls=None): DeprecationWarning, stacklevel=2, ) - with obj.cross_validation_lock: + # Using a context manager has a large runtime overhead, so we + # write out the obj.cross_validation_lock call here. + _cross_validation_lock = obj._cross_validation_lock + try: + obj._cross_validation_lock = True value = self._validate(obj, default) + finally: + obj._cross_validation_lock = _cross_validation_lock obj._trait_values[self.name] = value obj._notify_observers( Bunch(