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