Drain the Rust client when its last copy in Python is dropped. #1334
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.
If the Python application wants to exit (or the client just gets garbage collected), we want to finish sending any batched requests before proceeding with the GC or app shutdown.
Normally, Python will make sure to shut down any Python-side threads before allowing the program to exit. But it's completely unaware of Rust's own threads, so it can't shut them down or wait for them. This is why we need to explicitly make sure they complete their work and shut down on their own. The
Drop
trait in Rust runs when the value is dropped, and we ensure we shut down the background threads only when we're certain the onlyArc
copy of the Rust client is the one we're holding (and which is about to go out of scope).