Daemon performance seems slow
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
I've written a simple little timing script:
import os
from timing import TicToc # our own timing context
with TicToc('stop daemon'):
os.system('dmypy stop')
for _ in range(10):
with TicToc('Run on scratch'):
os.system('dmypy run scratch.py > boo.txt')
with TicToc('Modify scratch'):
with open('scratch.py', 'a') as f:
f.write('\n\nx: int = 5\n')
scratch.py is a file in a repo with ~100k lines of code. It's a work in progress as far as typing goes; boo.txt ends with Found 2587 errors in 143 files (checked 1 source file)
The intention of the script is to simulate me working on code, e.g. scratch.py, and having type checking run frequently (e.g. every time I save the file).
With default mypy (1.8.0) settings, I get this:
Daemon stopped
[stop daemon] 0.161 seconds
[Run on scratch] 33.603 seconds
[Modify scratch] 0.002 seconds
[Run on scratch] 7.247 seconds
[Modify scratch] 0.002 seconds
[Run on scratch] 3.549 seconds
[Modify scratch] 0.001 seconds
[Run on scratch] 7.029 seconds
[Modify scratch] 0.002 seconds
[Run on scratch] 3.721 seconds
[Modify scratch] 0.001 seconds
[Run on scratch] 6.860 seconds
[Modify scratch] 0.002 seconds
[Run on scratch] 3.705 seconds
[Modify scratch] 0.001 seconds
[Run on scratch] 8.777 seconds
[Modify scratch] 0.002 seconds
[Run on scratch] 3.623 seconds
[Modify scratch] 0.001 seconds
[Run on scratch] 6.872 seconds
[Modify scratch] 0.002 seconds
In other words, the time it takes to check this one file (once the daemon has started) oscillates between ~4 seconds and ~7 seconds, just by adding a single line to scratch.py each time.
Without modifying scratch.py between runs, I get this:
Daemon stopped
[stop daemon] 0.161 seconds
[Run on scratch] 33.603 seconds
[Run on scratch] 4.002 seconds
[Run on scratch] 0.369 seconds
[Run on scratch] 0.364 seconds
[Run on scratch] 0.364 seconds
[Run on scratch] 0.371 seconds
[Run on scratch] 0.364 seconds
[Run on scratch] 0.366 seconds
[Run on scratch] 0.362 seconds
[Run on scratch] 0.362 seconds
- Is this oscillation in run time (seen on the first test) expected?
- Is it expected to see a second run be much slower than subsequent runs on the same file if nothing is modified?
- Is there anything I can do to speed this up, other than setting
follow-importstoskip?
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con lo script di misurazione dei tempi fornito e confronta esecuzioni ripetute di dmypy run scratch.py con e senza aggiunte a scratch.py. Analizza i tempi del daemon alla prima esecuzione, nelle esecuzioni senza modifiche e con il file modificato; il lavoro è completato quando viene spiegata l’oscillazione e viene individuato un modo supportato per ridurre il tempo di controllo oltre follow-imports=skip.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools, performance
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100