Commit 63e3cad
Use .get_cached_default_environment() from jedi (#406)
In some situations, pyls can call Document.sys_path _very_ frequently. That
method calls jedi.api.environment.get_default_environment(), which can call
jedi.api.environment.find_system_pythons(). On systems with pyenv and many
python versions installed, this can be expensive, as jedi._compatibilty.which
returns a shim path for python major version. Each found version spawns a
subprocess to check the specific version of the python found at the path (via
creation of a jedi Environment). However, if it's only found the pyenv shim,
when a subprocess is spawned, the shim fails to find the version, and pyenv
spends significant time looking for the requested command in other installed
pythons.
Calling .get_cached_default_environment insures jedi goes through the above
process no more than once per 10 minutes per instance of pyls.
Even on systems without pyenv, calling get_default_environment() directly
results in at least one subprocess invocation, and a new jedi Environment object
for each invocation. As Document.sys_path can be called as often as once per
keypress (depending on the client, though this seems to be the case for
lsp-mode) reducing work on that path provides noticeable improvement in
performance.1 parent b0b6eeb commit 63e3cad
1 file changed
+1
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
218 | 218 | | |
219 | 219 | | |
220 | 220 | | |
221 | | - | |
| 221 | + | |
222 | 222 | | |
223 | 223 | | |
224 | 224 | | |
0 commit comments