Join dependency execution paths before executing #3669
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.
This goes hand in hand with encode/starlette#1260
The idea is to defer all execution and binding of arguments to dependencies to a central place using a series of closures/wrappers.
This provides better separation of the responsibilities of the DI system (executing the dependency w/ it's values) from concurrency management (binding sync deps to a thread pool, managing contexts, etc). I think evidence to this is that this system can be annotated to carry dependency return type information through all of the wrapping (see here).
This change should be 100% backwards compatible (unless we remove the now unused
contextmanager_in_threadpool
method, in which case this would not be backwards compatible, but it would be an easy fix for users).