Я пытался профилировать многопоточную асинхронную программу. Сначала я начал с cProfile, потому что у меня не так много опыта работы с Python, но когда я получил странные/противоречивые результаты, я провел небольшое исследование и узнал, что cProfile будет профилировать только основной поток, поэтому мне нужен yappi, который должен профилировать все потоки и асинхронные вызовы.
Я вызывал профилировщики следующим образом:
Код: Выделить всё
$ python -m cProfile -m mymodule.main args
Код: Выделить всё
$ python -m yappi -o profile -tpstat src/mymodule/main.py args
и в обоих случаях я получаю странные результаты; общее время выглядит хорошо - если я суммирую все общее время, оно будет равно времени выполнения программы, которое было указано в верхней части вывода как «X вызовов функций за Y секунд» - но большое количество вызовов функций будет показывать число, намного большее, чем Y для их совокупного времени. Даже если он говорит, что за 700 секунд было выполнено X вызовов функций, он скажет, что совокупное время некоторой функции составляет 1800 секунд.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ire-progra