Speed up array appends
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 42/100
Direzione di ricerca
Start from the array append path that tomlkit.dumps reaches when a Python list is converted, and find where the index is rebuilt for every existing item. Time the 3000-item example before changing anything. Done means that a normal append only indexes the new item, middle inserts and special formatting items still rebuild, and the output text and existing tests stay the same.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Adding an item to the end of an array rebuilds the index for every item already in it. So when an array is built one item at a time, the same entries get checked over and over.
This also happens when writing a Python list with tomlkit.dumps, not just when calling append directly. It can add up when writing a long file list or dependency list.
For example, this goes through the repeated append path:
import tomlkit
files = [f"src/package/module_{n}.py" for n in range(3000)]
text = tomlkit.dumps({"files": files})
For a normal append, the old items haven't moved. Could we keep their indexes and add only the new one? Middle inserts and the special formatting items can keep the current rebuild.
For N normal appends, that would bring the index work from O(N²) to O(N), without adding another cache. Converting the values and writing the TOML would still take their own time.
- Lingua principale
- Python
- Stelle
- 862
- Fork
- 193
- Merge medio
- 4g 2h
- PR unite (30g)
- 25
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna 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.
Altre issue di python-poetry/tomlkit
-
Deleting the last key under a dotted key in an inline table produces invalid TOMLForse già presa @cig13zs l’ha presa 2 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
python-poetry/tomlkit#662 ·
I maintainer di solito rispondono entro 2 giorni
-
AttributeError on an out-of-order table under an indented header (4+ levels)Forse già presa @cig13zs l’ha presa 2 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 18/100
python-poetry/tomlkit#661 ·
I maintainer di solito rispondono entro 2 giorni
-
Regression: impossible to dump multiline strings with leading newlineForse già presa @shivampwm2020 l’ha presa 4 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
python-poetry/tomlkit#655 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
In-place array repetition changes values without updating serialized TOMLForse già presa @harbinresearcher l’ha presa 5 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
python-poetry/tomlkit#646 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
tomlkit 0.15.1 fails on out-of-order table headerForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
python-poetry/tomlkit#632 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di python-poetry/tomlkit
Issue simili
-
Deferred from #1869: Complete the companion pytest guardrail update noted in the PR description...Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
NousResearch/hermes-agent#140958 ·
I maintainer di solito rispondono entro 1 giorno
-
Bug triage/confirmed
Difficoltà 2/5 Mezza giornata Idoneità per principianti 85/100
agentscope-ai/agentscope#3355 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
ethereum/execution-specs#3859 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno