Stackshots работа.Поскольку вы объединили Python и C, вы можете обрабатывать их отдельно.Для Python вы можете нажать Ctrl-C, пока медленнее исследовать стек.Сделайте это несколько раз.Это откроет все, что вы можете исправить в коде Python.Для кода C, запустите все это в отладчике, таком как GDB, и нажмите Ctrl-C, чтобы получить трассировку стека в C. Некоторые из них предоставят все, что вы можете исправить в C-коде.Мне сказали, что OProfile тоже может это сделать.(Другой способ - использовать lsstack , если он доступен.)
Это малоизвестный метод, работающий по этому принципу: предположим, у вас есть бесконечный цикл или почти бесконечный цикл.Как бы вы нашли это?Вы бы остановили программу и увидели, что она делает, верно?Предположим, что программа заняла в два раза больше времени, чем необходимо.Каждый раз, когда вы останавливаете его, вероятность того, что вы поймете это, выполняя ненужные вещи, составляет 50%.Так что все, что вам нужно сделать, это остановить его несколько раз.Как только вы увидите, что он делает что-то, что можно улучшить, всего за 2 образца, вы знаете, что можете исправить это для здорового ускорения.Затем вы можете повторить это, чтобы получить следующую проблему.Измерение не главное.Поймать вещи, которые вы можете улучшить, это главное.