Профилирование потоков Python

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

1 ответ

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

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

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

Другие вопросы по тегам