pstats.Stats: Add caller/callee sorting and filtering options to `print_callers` and `print_callees`
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece por pstats.Stats.print_callers e print_callees e, em seguida, compare os argumentos nomeados propostos e o comportamento compartilhado de ordenação/filtragem com o PR vinculado gh-125856. O trabalho estará concluído quando os detalhes dos chamadores e dos chamados puderem ser ordenados e limitados de forma independente conforme descrito, preservando o comportamento de filtragem existente do nível superior.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- devtools
- Tipo de issue
- Funcionalidade
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 35/100