From c467812bc0174c12546f7bfdd4f6e445b87590c0 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Mon, 2 May 2022 15:45:22 -0700 Subject: bpo-46787: Fix `ProcessPoolExecutor exception` memory leak (GH-31408) (GH-31408) Do not store `ProcessPoolExecutor` work item exception traceback that prevents exception frame locals from being garbage collected. (cherry picked from commit 9c204b148fad9742ed19b3bce173073cdec79819) Co-authored-by: themylogin --- Lib/concurrent/futures/process.py | 3 +++ Misc/NEWS.d/next/Library/2022-02-18-20-09-29.bpo-46787.juwWc0.rst | 1 + 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2022-02-18-20-09-29.bpo-46787.juwWc0.rst diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py index 6ee2ce6..c03187d 100644 --- a/Lib/concurrent/futures/process.py +++ b/Lib/concurrent/futures/process.py @@ -126,6 +126,9 @@ class _ExceptionWithTraceback: tb = traceback.format_exception(type(exc), exc, tb) tb = ''.join(tb) self.exc = exc + # Traceback object needs to be garbage-collected as its frames + # contain references to all the objects in the exception scope + self.exc.__traceback__ = None self.tb = '\n"""\n%s"""' % tb def __reduce__(self): return _rebuild_exc, (self.exc, self.tb) diff --git a/Misc/NEWS.d/next/Library/2022-02-18-20-09-29.bpo-46787.juwWc0.rst b/Misc/NEWS.d/next/Library/2022-02-18-20-09-29.bpo-46787.juwWc0.rst new file mode 100644 index 0000000..cf167ff --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-02-18-20-09-29.bpo-46787.juwWc0.rst @@ -0,0 +1 @@ +Fix :class:`concurrent.futures.ProcessPoolExecutor` exception memory leak -- cgit v0.12