mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
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
This commit is contained in:
parent
e304e33c16
commit
8988945cdc
3 changed files with 37 additions and 1 deletions
|
@ -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')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue