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 還沒有評估資料。