alexmojaki / alexmojaki/executing

parent pointers in AST nodes hurt deepcopy performance

Aperta
#63 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Python
Stelle
401
Fork
38
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Obligatory "I'm a huge fan of your work".

Background: I maintain a library called [ipyflow](https://github.com/ipyflow/ipyflow), which uses another library I maintain called [pyccolo](https://github.com/smacke/pyccolo). I noticed that on ipython >= 8.0, which uses `executing` for better stack traces, ipyflow would have really bad performance regressions the first time after a cell throws some exception.

Eventually I traced it to pyccolo's use of `copy.deepcopy` in a few places -- performance was bad because the parent pointers that `executing` added to AST nodes were causing deepcopy to do a lot of extra unnecessary work.

I ended up working around it on the pyccolo side, but I figured you may be interested in this for other libraries that may want to use `executing` and get surprised when `deepcopy` has bad perf. The way we maintain deepcopy-ability in pyccolo is to maintain a mapping from id(node) to parent for parent pointers, which avoids setting an attribute on the AST node directly.

Thanks for this great library!

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.