From 46d0a3d09dd0913e935d0a7bad6a271dbb14ed39 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Fri, 13 Aug 2010 12:26:31 +0200 Subject: [PATCH] workerpool: Don't keep reference to task arguments The workerpool should not keep any reference to task arguments after they were processed by RunTask. Doing so led to jobs being cached by the job queue's WeakValueDictionary for longer than they should've been. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Manuel Franceschini <livewire@google.com> --- lib/workerpool.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/workerpool.py b/lib/workerpool.py index 33ef9328a..812732946 100644 --- a/lib/workerpool.py +++ b/lib/workerpool.py @@ -78,9 +78,8 @@ class BaseWorker(threading.Thread, object): """ pool = self.pool - assert self._current_task is None - while True: + assert self._current_task is None try: # Wait on lock to be told either to terminate or to do a task pool._lock.acquire() @@ -97,7 +96,11 @@ class BaseWorker(threading.Thread, object): self._current_task = task + # No longer needed, dispose of reference + del task + assert self._HasRunningTaskUnlocked() + finally: pool._lock.release() -- GitLab