-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
priority:lowThis should be addressed only if there is nothing else on the tableThis should be addressed only if there is nothing else on the tabletype:enhancementNew feature or enhancement visitble to usersNew feature or enhancement visitble to users
Milestone
Description
What's needed?
Replace the pattern in _data_pipeline to create objects only once and that lives forever by creating a decorator (or selecting an existent one) to lazily create attributes and cache them for the lifetime of the _data_pipeline.
Proposed solution
Assess the different suggestions in these comments
We tried @cached_property and @lazy, but @cached_property is really complex and uses a lock (although it is removed in Python 3.12) and both allow writing to the property, and we need them to be read-only.
Use cases
Simplify code and improve code readability when there are many lazy attributes like in _data_pipeline
Alternatives and workarounds
Write ad-hoc code to do the lazy initialization.
Additional context
Originally posted in frequenz-floss/frequenz-sdk-python#799 (comment)
Metadata
Metadata
Assignees
Labels
priority:lowThis should be addressed only if there is nothing else on the tableThis should be addressed only if there is nothing else on the tabletype:enhancementNew feature or enhancement visitble to usersNew feature or enhancement visitble to users
Type
Projects
Status
To do