Извините, я не знаком с Python, но есть общий метод , который работает, если вы можете вручную прервать выполнение в случайное время.
Просто сделайте это и отобразите стек вызовов. Он с высокой вероятностью скажет вам, что вы хотите знать. Если вы хотите быть более уверенным, просто сделайте это несколько раз.
Это работает, потому что виновный вызывающий абонент должен находиться в стеке вызовов в течение той части времени, которое тратится впустую, что подвергает его прерываниям в течение большей части времени, независимо от того, распространяется ли оно на множество коротких вызовов или на несколько длительных из них.
ПРИМЕЧАНИЕ. Этот процесс больше похож на диагностику, чем на измерение. Предположим, что плохой звонок тратит 90% времени. Затем, каждый раз, когда вы его останавливаете, вероятность того, что неправильный оператор вызова находится прямо в стеке вызовов, составляет 90%, и вы сможете увидеть, что он плохой. Однако, если вы хотите точно измерить потери, это другая проблема. Для этого вам понадобится намного больше сэмплов, чтобы увидеть, какой% из них содержит этот вызов. Или, в качестве альтернативы, просто исправьте виновный вызов, отметьте ускорение, и это точно скажет вам, какой была потеря.