Make imports lazy (to speed up asdf extension) #502
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.
The general idea is to speed up the asdf entry point (which is loaded when the asdf extension manager is created). The entrypoint lists
gwcs.extensions
:gwcs/pyproject.toml
Line 35 in 53025a9
This will trigger the
*
imports ingwcs.__init__.py
:gwcs/gwcs/__init__.py
Lines 69 to 72 in 53025a9
which end up importing lots of "heavy hitters" (like scipy, big parts of astropy etc).
Minimal code for testing the entry point is:
To check which modules this import (and ignoring asdf as that's unavoidable):
With the current gwcs this imports 747 modules including many parts of scipy and astropy and on my system the entry point loading takes ~600ms.
With this PR the same code imports 90 modules with none from scipy and takes ~250ms. The remaining imports are as follows:
Click to expand