alexmojaki / alexmojaki/executing
parent pointers in AST nodes hurt deepcopy performance
- 主要言語
- Python
- スター
- 401
- フォーク
- 38
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
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!
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。