он многопоточный и каждый поток обращается в сеть через urllib
с недавних пор, видимо после каких-то изменений, софт стал намертво зависать в самых неожиданных местах, при работе с сетью
решил попробовать профилировать код
поиски привели меня к схеме
python3 -m cProfile -o out.pyprof start.pyw
pyprof2calltree -i out.pyprof -o my.out
kcachegrind my.out
написал тестовый скрипт
def test2():
print('test 2')
def test():
print('hello shit')
test2()
if __name__ == '__main__':
test()
абсолютно непонятно, что это такое, сколько времени заняла test2() и чем она была вызвана
хорошей документации не нашел, максимум такое “руководство”: http://docs.kde.org/stable/ru/kdesdk/kcachegrind/guidelines.html
Второй способ дал мне это:
python3 -m cProfile -o out.pstats start.pyw
gprof2dot -f pstats out.pstats | dot -Tpng -o out.png
http://clip2net.com/clip/m68436/1307554914-out-30kb.png
довольно информативно, но если применить это к моему многопоточному софту, получаем здоровый граф, в котором большинство функций встроено в питон, а моих личных довольно мало. и нет никакого поиска, никакого гуи - статичный png
в связи с этим вопрос - как получить хороший полный граф, который отражает запуск всех моих (а не нативных) функций от начала и до конца - в kcachegrind?
есть ли средства лучше него?
при профилировании многопоточного софта разумнее наверное завертывать в профайлер создание одного потока и его запускать?
PS вот здесь я, чтобы лучше запомнить, подробно расписал оба использованных мной способа профилирования python-скриптов - http://www.lsdeex.ru/archives/318