python / python/mypy

slow dmypy recheck times

Ouverte
#6,722 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

performance priority-1-normal topic-daemon topic-fine-grained-incremental
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Merge moyen
1 j 18 h
PR mergées (30 j)
54

Description

Hi, I'm creating an issue for a problem discussed with @ilevkivskyi over at https://github.com/dropbox/mypy-PyCharm-plugin/issues/26

Ivan indicated that he's getting 300-500ms response time from dmypy on rechecks of a large code base, but on my moderately large code base, dmypy is taking over 15s to rerun if I edit any files.

I'm using 0.701.

First I start the daemon:

$ dmypy run -v -- python/packages
err                     : 
out                     : python/packages/filesize.py:51: error: I ...
platform                :     darwin
python_version          :        2_7
roundtrip_time          :     20.145
stats                   : {
'validate_meta_time': 0.005048990249633789,
'files_parsed': 819, 
'modules_parsed': 520, 
'stubs_parsed': 299, 
'parse_time': 4.495372295379639, 
'find_module_time': 0.3217315673828125, 
'find_module_calls': 5739, 
'graph_size': 819, 
'stubs_found': 299, 
'graph_load_time': 5.5668110847473145, 
'fm_cache_size': 1936, 
'sccs_left': 0, 
'nodes_left': 0, 
'cache_commit_time': 4.0531158447265625e-06, 
'load_fg_deps_time': 9.5367431640625e-07
}
status                  :          1

Then I edit a file and recheck:

$ dmypy recheck -v --update python/packages/foo.py
err                     : 
out                     : python/packages/foo.py:1 ...
platform                :     darwin
python_version          :        2_7
roundtrip_time          :     17.837
stats                   : {
'load_fg_deps_time': 2.5272369384765625e-05, 
'validate_meta_time': 1.3113021850585938e-05, 
'files_parsed': 1, 
'modules_parsed': 1, 
'stubs_parsed': 0, 
'parse_time': 0.002131938934326172, 
'find_module_time': 0.005670785903930664, 
'find_module_calls': 4, 
'semanal_time': 0.0036809444427490234,
'typecheck_time': 0.0034759044647216797, 
'deps_time': 0.001669168472290039, 
'finish_passes_time': 0.0005908012390136719, 
'update_isolated_time': 0.021294116973876953, 
'propagate_time': 0.003412961959838867, 
'find_changes_time': 0.0008490085601806641, 
'fg_update_time': 17.824305057525635,
'files_changed': 1
}
status                  :          1

Clearly the problem lies in fg_update_time!

It may be important to note that this code produces hundreds of errors. I'm using a custom mypy runner to filter out errors I'm not concerned with until my message filtering PR gets some traction.

Here's my mypy.ini:

[mypy]
python_version = 2.7
ignore_missing_imports = true
follow_imports = skip
warn_no_return = false
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true

Any guidance is greatly appreciated!

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez les temps signalés avec dmypy run et dmypy recheck -v --update, en utilisant les paramètres mypy.ini fournis et une base de code comparable. Commencez par suivre la statistique fg_update_time, puis comparez-la aux autres temps de recheck et confirmez que la modification réduit le délai signalé sans modifier les résultats de la vérification des types.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
performance, tooling
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.