`dmypy` - poor performance when a lot of possibly unrelated errors
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Merge moyen
- 1 j 18 h
- PR mergées (30 j)
- 54
Description
Bug Report
The dmypy daemon will experience poor performance if there are a lot of files with errors, even if only a single file is updated.
To Reproduce
Create a ball of mud with errors. This script requires some tweaking to really bring out the issue but its a good starting point:
https://github.com/JamesHutchison/mypy/blob/dmypy-update-perf/ball_of_mud/generate_ball_of_mud.py
The performance deficit is proportionate to the number of failing files.
Expected Behavior
dmypy is always fast for small changes
Actual Behavior
dmypy is slow.
Your Environment
- Mypy version used: 0.991
Why is this important?
When converting a large repo to mypy you will have a lot of failing files at first and you cannot use --follow-imports=silent
Notes
The cause appears to be this code:
https://github.com/python/mypy/blob/master/mypy/server/update.py#L847
From what I can tell, it looks like dmypy relies on files failing their imports to know to revisit them later. This appears to also be the reason that you cannot use --follow-imports=silent with dmypy.
For example, when --follow-imports=error:
- File A is built, and File A imports file B. File A gets errors about B not existing.
- File B is built
- File A gets built again, but this time B is cached (or loaded, or whatever) and no longer fails import
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par mypy/server/update.py vers la ligne 847 et reproduisez le ralentissement à l’aide du script ball_of_mud/generate_ball_of_mud.py lié dans l’issue. Cherchez pourquoi de nombreux fichiers en échec sont retraités alors qu’un seul fichier est modifié ; le travail est terminé lorsque dmypy reste rapide pour les petites modifications malgré les erreurs sans rapport, tout en préservant le comportement d’importation pertinent.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100