Как я могу профилировать код Python построчно?Python

Программы на Python
Anonymous
Как я могу профилировать код Python построчно?

Сообщение Anonymous »

Я использую cProfile для профилирования своего кода, и он отлично работает. Я также использую gprof2dot.py для визуализации результатов (делает это немного понятнее).
Однако cProfile (и большинство других профилировщиков Python, которые я видел до сих пор), похоже, профилирует только на уровне вызова функций. Это вызывает путаницу, когда определенные функции вызываются из разных мест — я понятия не имею, вызов №1 или вызов №2 занимает большую часть времени. Ситуация становится еще хуже, если рассматриваемая функция имеет глубину шесть уровней и вызывается из семи других мест.
Как мне получить построчное профилирование?
Вместо этого:

Код: Выделить всё

function #12, total time: 2.0s
Мне бы хотелось увидеть что-то вроде этого:

Код: Выделить всё

function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
cProfile действительно показывает, какая часть общего времени «передается» родительскому элементу, но опять же, это соединение теряется, когда у вас есть несколько слоев и взаимосвязанных вызовов.
В идеале мне бы хотелось иметь графический интерфейс, который анализировал бы данные, а затем показывал бы мне мой исходный файл с общим временем, заданным для каждой строки. Примерно так:

Код: Выделить всё

main.py:

a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
Тогда я смогу щелкнуть второй вызов «func(c)», чтобы увидеть, что занимает время в этом вызове, отдельно от вызова «func(a)». Имеет ли это смысл?

Вернуться в «Python»