Python cProfile / snakeviz не может обрабатывать несколько функций, вызывающих одну и ту же функцию - PullRequest
0 голосов
/ 20 мая 2018

У меня проблемы с интерпретацией cProfile данных.Чтобы показать вам мою проблему, я создал этот простой скрипт.

Функция D вызывает B и C, которые оба вызывают A.
Функция A явно занимает 1 секунду (+ накладные расходы).
Если мы посмотрим на результаты snakeviz, то вы увидите, чтоотчетность немного странная.Я понимаю, что в общей сложности 2 секунды было потрачено функцией A, но внутри функции C функция A потратила всего 1 секунду, и это то, что меня интересует. Кто-нибудь знает, есть ли настройка (или другой просмотрщик), гдеУ меня нет этой проблемы?

import time
import cProfile

def A():
    time.sleep(1)

def B():
    A()

def C():
    A()

def D():
    B()
    C()

cProfile.run('D()','profileResults.prf')

Результаты snakeviz

1 Ответ

0 голосов
/ 04 августа 2018

К сожалению, профиль Python не хранит все дерево вызовов.(Это было бы слишком дорого.) Я задокументировал проблему здесь и как snakeviz проблему .

Я недавно создал тунца длявизуализация профилей Python для решения некоторых из этих проблем.тунец не может показать все дерево вызовов, но, по крайней мере, он также не отображает неверную информацию.

Установка с

pip3 install tuna

Создание профиля времени выполнения

python -mcProfile -o program.prof yourfile.py

и просто запустите тунца в файле

tuna program.prof

enter image description here

...