-
-
Notifications
You must be signed in to change notification settings - Fork 301
Labels
Milestone
Description
Steps to reproduce
python3 -X importtime -c 'import astroid'
scalene --html pylint/__main__.py --- pylint/constants.py
import time: self [us] | cumulative | imported package
import time: 157 | 157 | _io
import time: 47 | 47 | marshal
import time: 351 | 351 | posix
import time: 965 | 1518 | _frozen_importlib_external
import time: 96 | 96 | time
import time: 167 | 262 | zipimport
import time: 122 | 122 | _codecs
import time: 726 | 848 | codecs
import time: 497 | 497 | encodings.aliases
import time: 1443 | 2787 | encodings
import time: 156 | 156 | encodings.utf_8
import time: 66 | 66 | _signal
import time: 36 | 36 | _abc
import time: 252 | 288 | abc
import time: 548 | 835 | io
import time: 41 | 41 | _stat
import time: 146 | 186 | stat
import time: 738 | 738 | _collections_abc
import time: 106 | 106 | genericpath
import time: 255 | 360 | posixpath
import time: 3296 | 4579 | os
import time: 127 | 127 | _sitebuiltins
import time: 273 | 273 | apport_python_hook
import time: 132 | 404 | sitecustomize
import time: 1287 | 6395 | site
import time: 127 | 127 | itertools
import time: 110 | 110 | keyword
import time: 51 | 51 | _operator
import time: 219 | 270 | operator
import time: 133 | 133 | reprlib
import time: 46 | 46 | _collections
import time: 1002 | 1684 | collections
import time: 199 | 199 | types
import time: 41 | 41 | _functools
import time: 509 | 2432 | functools
import time: 529 | 529 | enum
import time: 67 | 67 | _sre
import time: 203 | 203 | sre_constants
import time: 300 | 502 | sre_parse
import time: 1262 | 1830 | sre_compile
import time: 54 | 54 | _locale
import time: 139 | 139 | copyreg
import time: 569 | 3119 | re
import time: 135 | 135 | token
import time: 848 | 4101 | tokenize
import time: 190 | 190 | warnings
import time: 269 | 459 | importlib
import time: 124 | 124 | __future__
import time: 117 | 117 | collections.abc
import time: 434 | 434 | contextlib
import time: 1557 | 1990 | typing
import time: 351 | 351 | astroid.util
import time: 1682 | 1682 | astroid.typing
import time: 892 | 2924 | astroid.exceptions
import time: 593 | 593 | _weakrefset
import time: 912 | 1504 | weakref
import time: 91 | 91 | org
import time: 40 | 131 | org.python
import time: 38 | 168 | org.python.core
import time: 253 | 1925 | copy
import time: 154 | 154 | _ast
import time: 1483 | 1636 | ast
import time: 143 | 143 | _opcode
import time: 285 | 428 | opcode
import time: 432 | 859 | dis
import time: 240 | 240 | importlib.machinery
import time: 134 | 134 | linecache
import time: 2600 | 5468 | inspect
import time: 1872 | 9264 | dataclasses
import time: 408 | 9672 | pprint
import time: 281 | 281 | astroid.context
import time: 670 | 670 | importlib._abc
import time: 217 | 886 | importlib.util
import time: 131 | 131 | fnmatch
import time: 120 | 120 | _winapi
import time: 57 | 57 | nt
import time: 47 | 47 | nt
import time: 46 | 46 | nt
import time: 93 | 93 | nt
import time: 439 | 800 | ntpath
import time: 54 | 54 | errno
import time: 102 | 102 | urllib
import time: 1342 | 1444 | urllib.parse
import time: 1043 | 3470 | pathlib
import time: 286 | 3756 | astroid.const
import time: 123 | 123 | astroid.interpreter
import time: 183 | 306 | astroid.interpreter._import
import time: 384 | 384 | traceback
import time: 225 | 225 | _string
import time: 3610 | 3834 | string
import time: 910 | 910 | threading
import time: 116 | 116 | atexit
import time: 10004 | 15246 | logging
import time: 678 | 678 | sysconfig
import time: 234 | 234 | astroid.interpreter._import.util
import time: 587 | 587 | _sysconfigdata__x86_64-linux-gnu
import time: 2256 | 19000 | astroid.modutils
import time: 985 | 19985 | astroid.interpreter._import.spec
import time: 335 | 335 | astroid.transforms
import time: 502 | 25767 | astroid.manager
import time: 898 | 898 | astroid.nodes.as_string
import time: 134 | 134 | astroid.nodes.const
import time: 240 | 240 | astroid.nodes.utils
import time: 876 | 37865 | astroid.nodes.node_ng
import time: 7112 | 50129 | astroid.nodes._base_nodes
import time: 506 | 506 | astroid.decorators
import time: 822 | 822 | astroid.interpreter.objectmodel
import time: 728 | 1550 | astroid.bases
import time: 3685 | 5740 | astroid.nodes.node_classes
import time: 121 | 121 | astroid.filter_statements
import time: 112 | 112 | astroid.nodes.scoped_nodes.utils
import time: 291 | 522 | astroid.nodes.scoped_nodes.mixin
import time: 103 | 103 | astroid.interpreter.dunder_lookup
import time: 657 | 759 | astroid.nodes.scoped_nodes.scoped_nodes
import time: 283 | 1564 | astroid.nodes.scoped_nodes
import time: 527 | 57958 | astroid.nodes
import time: 803 | 803 | typing_extensions
import time: 230 | 1032 | astroid.constraint
import time: 119122 | 119122 | astroid.raw_building
import time: 247 | 119368 | astroid.helpers
import time: 436 | 436 | astroid.objects
import time: 237 | 237 | astroid.arguments
import time: 306 | 543 | astroid.protocols
import time: 600 | 121978 | astroid.inference
import time: 93 | 93 | astroid.__pkginfo__
import time: 84 | 84 | astroid.astroid_manager
import time: 87 | 87 | astroid.brain
import time: 189 | 275 | astroid.brain.helpers
import time: 967 | 967 | textwrap
import time: 370 | 370 | astroid._ast
import time: 511 | 880 | astroid.rebuilder
import time: 275 | 2120 | astroid.builder
import time: 123 | 123 | astroid.inference_tip
import time: 99 | 99 | astroid.brain.brain_numpy_utils
import time: 49 | 49 | math
import time: 27 | 27 | _bisect
import time: 141 | 167 | bisect
import time: 28 | 28 | _random
import time: 26 | 26 | _sha512
import time: 418 | 687 | random
import time: 12916 | 203319 | astroid
Current behavior
Currently astroid import time account for 25+% of the parse time for single file analysis in pylint (common with parallelized pre-commit hook). This is 50+% with --disable=all
. This is a follow up to #1320 where the import time was already decreased by 60%. We can see that importing astroid.raw_building
now takes 60% of the remaining import time, astroid.nodes._base_nodes
(3.5%) and astroid.nodes.node_classes
(1,7%) are the next biggest offenders that we control.
Expected behavior
Faster astroid import to make pylint more reactive.