for ii in range(200):
for jj in range(200, 400):
...block0...
if something:
break
else:
...block1...
Break
разрушит внутренний цикл, а block1 не будет выполнен (он будет работать только в том случае, если внутренний цикл завершен нормально).
Edit: добавлен еще один ответ о профилировщике бедного человека, который, IMHO, лучше для многопоточных приложений.
Взгляните на oprofile. Накладные расходы на профилирование этого инструмента незначительны, и он поддерживает многопоточные приложения - до тех пор, пока вы не хотите профилировать борьбу мьютексов (что является очень важной частью профилирования многопоточных приложений)
.Некий Пол Р. сказал, взгляните на Zoom. Вы также можете использовать lsstack , который является нетехнологичным, но удивительно эффективным по сравнению с gprof .
Добавлено: поскольку вы пояснили, что используете OpenGL на 33 мс, моя предыдущая рекомендация остается в силе. Кроме того, то, что я лично делал в подобных ситуациях, одновременно эффективно и не интуитивно понятно. Просто запустите его с типичной или проблемной рабочей нагрузкой, остановите его вручную и посмотрите, что он делает и почему. Сделайте это несколько раз. Теперь, если он изредка плохо себя ведет, вы хотели бы остановить его только тогда, когда он плохо себя ведет. Это непросто, но я использовал прерывание от будильника для правильной задержки. Например, если один кадр из 100 занимает более 33 мс, в начале кадра установите таймер на 35 мс, а в конце кадра выключите его. Таким образом, он будет прерываться только тогда, когда код занимает слишком много времени, и покажет вам, почему. Конечно, один образец может пропустить виновный код, но 20 образцов его не пропустят.