diff options
author | Antoine Pitrou <pitrou@free.fr> | 2017-03-24 12:52:11 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-24 12:52:11 (GMT) |
commit | 8988945cdc27ffa86ba8c624e095b51c459f5154 (patch) | |
tree | 3dd4f0619935cca2a0556f0a9cac10ff0aa6b678 /Lib/multiprocessing/pool.py | |
parent | e304e33c16e060932d1e2cc8a030d42b02b429b5 (diff) | |
download | cpython-8988945cdc27ffa86ba8c624e095b51c459f5154.zip cpython-8988945cdc27ffa86ba8c624e095b51c459f5154.tar.gz cpython-8988945cdc27ffa86ba8c624e095b51c459f5154.tar.bz2 |
bpo-29861: release references to multiprocessing Pool tasks (#743)
* bpo-29861: release references to multiprocessing Pool tasks
Release references to tasks, their arguments and their results as soon
as they are finished, instead of keeping them alive until another task
arrives.
* Comments in test
Diffstat (limited to 'Lib/multiprocessing/pool.py')
-rw-r--r-- | Lib/multiprocessing/pool.py | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py index ffdf426..ae8cec4 100644 --- a/Lib/multiprocessing/pool.py +++ b/Lib/multiprocessing/pool.py @@ -128,6 +128,8 @@ def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None, util.debug("Possible encoding error while sending result: %s" % ( wrapped)) put((job, i, (False, wrapped))) + + task = job = result = func = args = kwds = None completed += 1 util.debug('worker exiting after %d tasks' % completed) @@ -402,10 +404,11 @@ class Pool(object): if set_length: util.debug('doing set_length()') set_length(i+1) + finally: + task = taskseq = job = None else: util.debug('task handler got sentinel') - try: # tell result handler to finish when cache is empty util.debug('task handler sending sentinel to result handler') @@ -445,6 +448,7 @@ class Pool(object): cache[job]._set(i, obj) except KeyError: pass + task = job = obj = None while cache and thread._state != TERMINATE: try: @@ -461,6 +465,7 @@ class Pool(object): cache[job]._set(i, obj) except KeyError: pass + task = job = obj = None if hasattr(outqueue, '_reader'): util.debug('ensuring that outqueue is not full') |