Optimize singleton resolution with early cache return #169
Merged
Conversation
Move the cache-hit check before kwargs resolution in Factory.resolve() so singleton providers return immediately without copying static_kwargs or recursively resolving dependency providers on every call.
Replace dict.setdefault (which eagerly evaluates its default argument, constructing a CacheItem on every call even for cache hits) with a get-then-set pattern that only creates a CacheItem on first access.
setdefault is atomic in CPython, which prevents a race where two threads could each create a CacheItem and one overwrites the other, losing cached instances. The throwaway construction cost is the price of thread safety.
typing.cast is a no-op function call at runtime that still costs ~25-30ns per invocation. Remove it from resolve_provider and Factory.resolve where it runs on every resolution.
Replace two dict comprehensions (one filtering providers, one filtering statics) with a single loop that partitions into both dicts in one pass.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary