python / python/mypy

dmypy in a metadata reload loop with `--use-fine-grained-cache`

Abierto
#17,831 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug topic-daemon
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Bug Report

I'm investigating remote caching, I find that dmypy is spinning for a very long time when using --use-fine-grained-cache. I've tried dmypy check <file> and it takes 10 minutes before I give up. If I used no caching at all, it would take 1.5 minutes, and give me expected answers.

To Reproduce

  1. produce a cache with mypy --cache-fine-grained --sqlite-cache --no-incremental --cache-dir=...
  2. % dmypy start --log-file debug.log --timeout=3600 -- --use-fine-grained-cache --cache-dir=<cache> --sqlite-cache --verbose
  3. time dmypy check tools/my_tool.py 2>&1 | ts > log.txt

Expected Behavior

fast checks

Actual Behavior

Seems to spin at 100% cpu for a long time. in the log, I see just a bunch of

...
2254727 Sep 25 17:35:45 LOG:  Metadata not found for <module>
2254728 Sep 25 17:35:45 LOG:  Using cached AST for <module path> (<module>)
...

for every file in my venv & project. indeed, I see the same modules on repeat:

% grep 'Metadata not found for numpy.fft.helper' log.txt | wc -l 
284

which makes me think this is stuck in a loop.

Your Environment

  • Mypy version used: mypy 1.10.1 (compiled: yes)
  • Mypy command-line flags: (see above)
  • Mypy configuration options from mypy.ini (and other config files):
[mypy]
platform = linux
plugins = private_internal_plugin.py,trio_typing.plugin
skip_cache_mtime_checks = true
allow_any_generics = false
allow_incomplete_defs = false
allow_subclassing_any = false
allow_untyped_decorators = false
allow_untyped_defs = false
warn_redundant_casts = true
warn_unused_ignores = true
warn_return_any = true
implicit_reexport = true
show_error_codes = true
implicit_optional = true
explicit_package_bases = true
local_partial_types = true
exclude = (?x)(<some regex>)
disable_error_code = import-untyped
enable_error_code = ignore-without-code, unused-awaitable, truthy-bool, possibly-undefined
  • Python version used: Python 3.11.10

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproducir con el comando de generación de caché de mypy indicado y los comandos dmypy start/check, capturando debug.log y log.txt. Empieza rastreando las entradas repetidas “Metadata not found” y “Using cached AST”, incluida la repetición de numpy.fft.helper. Se considera terminado cuando dmypy check finalice sin el bucle de recarga de metadatos y sea sustancialmente más rápido que la ejecución sin caché.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python, sqlite
Área
cli, devtools, performance
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.