alexmojaki / alexmojaki/executing
parent pointers in AST nodes hurt deepcopy performance
- 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.