Provide a cleaner way to collect threads and processes in MultiprocessIterator #4155
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is rather a request for comment than a change request -
__del__
is often harmful because the timing and order of objects of__del__
is unpredictable especially when those objects have cyclic references. This commit tries to remove__del__
and to make iterators as context manager, available inwith
statement. Pros and cons in my thought follows on this:Pros
Cons
__del__
. See 'Side effects' below for further discussions.train_mnist_custom_loop.py
like this:Side effects of removing
__del__
:__del__
method other than MultiprocessIterator.finalize()
in garbage collection (via__del__
), with MNist example, so far I cannot find any unexpected behavior such as remaining shared memory or child processes but saw things cleanly removed by operating system.bulk_mem
is shared (ctypes memory) buffer, which may possibly remain after parent process termination, but as far as I tested with Python 3.6.3 it was tied to a temporary file and was removed right after memory allocation succeeded. Seestrace
result of runningsharedctypes.RawArray('b', 1024 * 1024)
below:SIGKILL
.