python: профилировщик, ориентированный на байт-код

Я пишу веб-приложение (http://www.checkio.org/), которое позволяет пользователям писать код питона. В качестве одной из многих метрик обратной связи я хотел бы включить профилирование при выполнении проверок этого кода. Это сделано для того, чтобы пользователи могли получить очень приблизительное представление об относительной эффективности различных решений.

Мне нужно, чтобы профиль был (разумно) детерминированным. Я не хочу, чтобы другая нагрузка на веб-сервер давала плохие показания эффективности. Кроме того, я беспокоюсь, что некоторые профилировщики не дадут хороших результатов, потому что эти короткие скрипты работают очень быстро. Модуль timeit показывает, что функция запускается тысячи раз, но я хотел бы не тратить ресурсы сервера на эти небольшие функции, если это возможно.

Неясно, какие из стандартных профилировщиков удовлетворяют этой потребности (если вообще существуют). В идеале профилировщик должен давать единицы «тиков байт-кода интерпретатора», которые будут увеличиваться на единицу для каждой инструкции байт-кода. Это будет очень грубая мера, но она отвечает требованиям детерминизма и высокой точности.

Какую систему профилирования следует использовать?


person bukzor    schedule 01.05.2011    source источник
comment
Не все запускается как байт-код интерпретатора, так что это плохой показатель времени. Один тик байт-кода интерпретатора, в котором вызывается собственный код, может занять микросекунды или часы.   -  person detly    schedule 02.05.2011
comment
Если вы хотите, чтобы люди могли находить свои узкие места, позвольте им взять образцы стека.   -  person Mike Dunlavey    schedule 02.05.2011
comment
@detly: я знаю, что это плохая мера, но в этой конкретной среде, где большинство расширений C запрещены песочницей, этого должно быть достаточно, чтобы люди могли сказать, о, мое решение медленнее, чем это, или даже я только что улучшилось в 30 раз!. Настоящий вопрос в том, где мне найти этого бедного профилировщика?   -  person bukzor    schedule 02.05.2011


Ответы (2)


Стандартный модуль профилировщика Python обеспечивает детерминированное профилирование.

person vartec    schedule 02.05.2011
comment
Но это не означает, что результаты профиля будут детерминированными. Вы путаетесь в терминологии. - person bukzor; 02.05.2011
comment
bukzor: и как это будет недетерминировано? профилировщики учитывают процессорное время, а не реальное время. Так что нагрузка не влияет на результат. - person vartec; 02.05.2011

Я также предлагаю попробовать яппи. (http://code.google.com/p/yappi/) В версии 0.62 он поддерживает профилирование процессорного времени, и вы можете остановить профилировщик в любое время...

person Sumer Cip    schedule 22.03.2012