Garbage collect task result queue when worker context exits #2973
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.
Description
Adds a call to explicitly close() the task result queue when a worker exits, rather than waiting for the worker to be garbage collected.
Motivation and Context
There are certain contexts (e.g. during test runs on certain architectures) where a worker may not be garbage collected until significantly after it exits. In test suites affected by this, running many Luigi tasks via the local scheduler can cause the test suite to break due to exceeding the system's open files threshold (as each task result queue uses a separate file-based semaphore). This fails all tests after the threshold is reached. Explicitly closing the task result queue when a worker exits ensures that the queue is not held open unnecessarily. Due to the behavior of close(), this should not close the queue for other producers/consumers, only the worker in question.
Have you tested this? If so, how?
After making this change and re-running my test suite, the 'too many open files' issue is no longer present.