Я пытаюсь выяснить, как измерить производительность нескольких потоков python в моем приложении. В настоящее время у меня есть несколько задач, которые выполняются в разных потоках на основе ввода пользователем, и я хотел бы измерить время выполнения, возможно, даже потребление памяти каждого из потоков. Я попытался использовать cProfile (при каждом создании потока, затем я бы записал данные в файл, а затем обобщил все результаты) с ограниченным успехом. Кроме того, у меня есть дополнительная проблема с блокировкой IO, которая искажает мои результаты. Есть ли способ эффективно профилировать мое приложение?Профилирование потоков Python
ответ
Существует несколько различных способов решения этой проблемы. cProfile
замечательный и поставляется с Python, однако многие люди рассматривают многопоточное профилирование как проблему. Один из способов обойти это - запустить отдельные экземпляры cProfile для каждого потока, а затем объединить результаты, используя Stats.add
.
Если это не так полезно, как вы надеялись, другой альтернативой может быть использование Yappi, что я имел успех, используя несколько специальных многопоточных случаев. У него отличная документация, поэтому у вас не должно быть слишком много проблем с настройкой.
Для профилирования, специфичного для памяти, проверьте Heapy. Но будьте осторожны, это может создать некоторые из самых больших файлов журнала, которые вы когда-либо видели, если ваш код плохой!
Моя система - это веб-сервер, если я использую 'pr = cProfile.Profile() 'в другом запросе, так называемые ** отдельные экземпляры cProfile **? – user3978288
- 1. Профилирование потоков C++ с часами()
- 2. Профилирование C + Python (SWIG)
- 3. Профилирование скрипта python
- 4. Трассировка и профилирование Python
- 5. Профилирование расширений python C
- 6. Профилирование пула многопроцессорности python
- 7. Профилирование памяти встроенный python
- 8. Профилирование SWIG Python code
- 9. Профилирование долговременного сервера Python
- 10. профилирование пула многопроцессорности python
- 11. Профилирование кода Python, использующего многопроцессорность?
- 12. Профилирование
- 13. Профилирование .Net-соперничества
- 14. Профилирование GIL
- 15. Профилирование производительности VSIX
- 16. Профилирование Linux-приложений
- 17. Python - Преобразование потоков в пул потоков?
- 18. Профилирование скрипта Python из среды оболочки
- 19. Как сделать профилирование проекта python в целом?
- 20. Профилирование/мониторинг памяти (python) в Google AppEngine
- 21. Профилирование Python через C-api (Как?)
- 22. Профилирование Python - потоковое аудио и спектр
- 23. Профилирование подпроцесса Popen вызывает в Python
- 24. Профилирование в Python: кто вызвал функцию?
- 25. Профилирование себя и аргументы в python?
- 26. Профилирование памяти питона 3
- 27. потоков в Python
- 28. программирование потоков в python
- 29. Понимание потоков демона Python
- 30. Создание потоков в python
С помощью cProfile вы отлично начали! Если вы могли бы объяснить немного больше о своем ограниченном успехе cProfile, мы, вероятно, могли бы исправить это и продолжить оттуда. – KushalP
Как несвязанное примечание, вы можете рассмотреть несколько процессов вместо нескольких потоков: http://en.wikipedia.org/wiki/Global_Interpreter_Lock – badp