2010-02-07 2 views
9

Я пытаюсь выяснить, как измерить производительность нескольких потоков python в моем приложении. В настоящее время у меня есть несколько задач, которые выполняются в разных потоках на основе ввода пользователем, и я хотел бы измерить время выполнения, возможно, даже потребление памяти каждого из потоков. Я попытался использовать cProfile (при каждом создании потока, затем я бы записал данные в файл, а затем обобщил все результаты) с ограниченным успехом. Кроме того, у меня есть дополнительная проблема с блокировкой IO, которая искажает мои результаты. Есть ли способ эффективно профилировать мое приложение?Профилирование потоков Python

+1

С помощью cProfile вы отлично начали! Если вы могли бы объяснить немного больше о своем ограниченном успехе cProfile, мы, вероятно, могли бы исправить это и продолжить оттуда. – KushalP

+0

Как несвязанное примечание, вы можете рассмотреть несколько процессов вместо нескольких потоков: http://en.wikipedia.org/wiki/Global_Interpreter_Lock – badp

ответ

3

Существует несколько различных способов решения этой проблемы. cProfile замечательный и поставляется с Python, однако многие люди рассматривают многопоточное профилирование как проблему. Один из способов обойти это - запустить отдельные экземпляры cProfile для каждого потока, а затем объединить результаты, используя Stats.add.

Если это не так полезно, как вы надеялись, другой альтернативой может быть использование Yappi, что я имел успех, используя несколько специальных многопоточных случаев. У него отличная документация, поэтому у вас не должно быть слишком много проблем с настройкой.

Для профилирования, специфичного для памяти, проверьте Heapy. Но будьте осторожны, это может создать некоторые из самых больших файлов журнала, которые вы когда-либо видели, если ваш код плохой!

+0

Моя система - это веб-сервер, если я использую 'pr = cProfile.Profile() 'в другом запросе, так называемые ** отдельные экземпляры cProfile **? – user3978288

Смежные вопросы