pstats.Stats: Add caller/callee sorting and filtering options to `print_callers` and `print_callees`
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
Feature or enhancement
Proposal:
Currently: print_callers(*amount) only applies its provided filters to the top-level details (the callees for print_callers and callers for print_callees), and the second-level details are unfiltered and left sorted by name. If you want to print the top 20 callers of a function with 1000 callers and you run print_callers(funcname, 20), you will get the top 20 matches of funcname and each will have all 1000 callers. Hence, the nominal workflow to sort and limit the number of callers for a particular function is to print the results, copy them (or read them back in from a file), parse them by splitting on whitespace and casting to ints and floats, and then sort.
I'm proposing (with a PR to follow) adding new keyword arguments as shown below, that are explicitly used for sorting and limiting the callers/callees, refactoring parts of the Stats class to share the sorting and filtering code.
def print_callees(self, *amount, callees_sort_key=None, callees_filter=()):
[...]
def print_callers(self, *amount, callers_sort_key=None, callers_filter=()):
[...]
Example:
>>> p.print_callers(r'\(has\)', callers_sort_key='time', callers_filter=5)
Ordered by: internal time
List reduced from 965 to 1 due to restriction <'\\(has\\)'>
Callers ordered by: internal time
Function was called by...
ncalls tottime cumtime
BaseClasses.py:820(has) <- 4926 0.002 0.002 worlds\overcooked2\Logic.py:6(has_requirements_for_level_access)
1148 0.000 0.001 worlds\overcooked2\Logic.py:291(can_reach_sky_shelf)
1119 0.000 0.000 worlds\overcooked2\Logic.py:278(can_reach_stonehenge_mountain)
728 0.000 0.000 worlds\overcooked2\Logic.py:257(can_reach_yellow_island)
220 0.000 0.000 worlds\overcooked2\Logic.py:310(can_reach_pink_island)
List reduced from 7 to 5 due to restriction <5>
Has this already been discussed elsewhere?
I have already discussed this feature proposal on Discourse
Links to previous discussion of this feature:
Feature proposal: https://discuss.python.org/t/pstats-stats-objects-should-allow-sorting-caller-callee-stats/67892
A previous stackoverflow question from someone else with a similar need: python - Why is pstats.print_callers() ignores the restriction argument? - Stack Overflow
Linked PRs
- gh-125856
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 pstats.Stats.print_callers 和 print_callees 开始,然后将提议的关键字参数以及共享的排序/过滤行为与关联的 PR gh-125856 进行比较。完成的标准是:调用方和被调用方的详细信息可以按照描述独立排序和限制,同时保留现有的顶层过滤行为。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- devtools
- Issue 类型
- 功能
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 描述清楚
- 新手友好度
- 35/100