python / python/mypy

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

Offen
#17,831 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-daemon
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Mit dem aufgeführten mypy-Befehl zur Cache-Generierung sowie den Befehlen dmypy start/check reproduzieren und dabei debug.log und log.txt erfassen. Beginne damit, die wiederholten Einträge „Metadata not found“ und „Using cached AST“ nachzuverfolgen, einschließlich der Wiederholung von numpy.fft.helper. Als erledigt gilt die Aufgabe, wenn dmypy check ohne die Schleife zum Neuladen der Metadaten abgeschlossen wird und wesentlich schneller als der Lauf ohne Cache ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python, sqlite
Bereich
cli, devtools, performance
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.