ensure threads are stopped in Progress().track #2934
Closed
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.
Type of changes
Checklist
Description
If
Progress().track
is used with a generator and an exception is raised within this generator the_TrackThread
is not stopped and the program does not finish. This change ensures that the_TrackThread
s are stopped correctly.A simple example would be:
This raises an error, since there is no
*
operator forint
andobject
. The error is shown correctly, but the program does not complete, because a_TrackThread
is still running.The problem is, that generators are not aware of exceptions thrown. Therefore,
track
does not realize that the iteration was aborted and keeps the_TrackThread
alive.My workaround is to store all
_TrackThread
instances in a set and stop them in theProgress().stop
method.Unfortunately, this does not work for
rich.progress.track
, because this function is also not informed about exceptions. Therefore, thewith
statement is not aborted and continues to run.I've prepared the changelog, but since I don't know your release schedule I've omitted the date of the release.