opencensus-python
opencensus-python copied to clipboard
Importing "from opencensus.ext.azure.log_exporter import AzureLogHandler" takes 0.6 -2.4 seconds
Describe your environment. python 3.10.8 opencensus-ext-azure==1.1.7 mac Ventura or windows 11. macbook pro 16 inch core i9 windows Intel 8700k
Steps to reproduce.
time python -c "from opencensus.ext.azure.log_exporter import AzureLogHandler"
vs
time python -c ""
What is the expected behavior?
Similar runtime.
What is the actual behavior?
time python -c "" # ~0.1-0.13 seconds
time python -c "from opencensus.ext.azure.log_exporter import AzureLogHandler" # ~0.7 - 2.6 seconds
Importing opencensus.ext.azure.log_exporter takes between 0.6 - 2.5 seconds to import.
Additional context.
This limits the ability to use opencensus.ext.azure in any cli application where startup times are crucial.
I tried lazy loading the module but that gives me errors.
Adding here profiling of import:

@et-at-micro
Thanks for doing this analysis. Curious would you be able to get the import time statistics for the trace and metrics exporters as well and compare them?
@lzchen

Updates:
Just the import without python bootime etc we are looking at ~690-760ms for all the tools.
The biggest single impact is with the import to MSAL that imports http.server (python standard library) that takes ~300ms and opencensus.ext.azure.common.transport already explicitly imports requests (external http server) that takes ~100ms.
That alone can save 30% of total import time.
The second is opencensus.trace.status that makes up for another 30% of import time.
this import google rpc and pkg_resources.
I did not see any large differences in metrics, logs or traces in import time or the biggest time consumers.