Working with Profile Data Using pstats
Python Profiling Your Code
Profiling Ma'lumotlari Bilan Ishlash: pstats
Python’da cProfile orqali olingan profiling ma'lumotlarini tahlil qilish uchun alohida kutubxona mavjud — bu pstats deb ataladi. pstats yordamida siz yig'ilgan profiling ma'lumotlarini saralash va filtrlash mumkin.
Keling, pstats moduli yordamida cProfile chiqishining odatdagi formatini qanday tiklashni ko'rib chiqaylik. Buning uchun formatted_output.py nomli faylni yaratamiz:
Ushbu misolda, siz pstats modulini import qilasiz va oldingi bo'limda yaratilgan profile_output.txt faylini Stats() yordamida yuklaysiz. Keyin strip_dirs() funksiyasidan foydalanib, fayllarning to'liq yo'llarini olib tashlaysiz, chunki bu ma'lumotlarni chiqarishda ularni ko'rishni istamaysiz. Eslatib o'tamiz, buni bajarganingizda, Stats obyekti o'zgartiriladi va yo'l ma'lumotlari yo'qoladi.
Keyin sort_stats('filename') yordamida profiling ma'lumotlarini fayl nomi bo'yicha saralaysiz. Profiling ma'lumotlarini quyidagi satrlar yordamida saralash mumkin:
- 'calls' — chaqiruvlar soni
- 'cumulative' — kümülatif vaqt
- 'cumtime' — kümülatif vaqt
- 'file' — fayl nomi
- 'filename' — fayl nomi
- 'module' — modul nomi
- 'ncalls' — chaqiruvlar soni
- 'pcalls' — asosiy chaqiruvlar soni
- 'line' — qator raqami
- 'name' — funksiya nomi
- 'nfl' — nom/fayl/qator
- 'stdname' — standart nom
- 'time' — ichki vaqt
- 'tottime' — ichki vaqt
Bu satrlarning aksariyati uchun SortKey enumlari mavjud, ular satrlar o'rniga ishlatilishi mumkin.
Endi esa profiling ma'lumotlarini print_stats() orqali chiqarishingiz mumkin.
Mana chiqish:
Chiqish unchalik o'xshash emas, ammo juda yaqin! Yuqorida keltirilgan satrlar yordamida chiqishni boshqa yo'llar bilan saralashni sinab ko'ring.
Agar chiqishni filtrlashni xohlasangiz, print_stats() funksiyasiga oddiy ifoda (regular expression) uzatishingiz mumkin. Oddiy ifodalar - bu biror narsani qidirishda foydalanish mumkin bo'lgan belgilardan iborat ketma-ketlikdir. Ular ko'p jihatdan o'z tiliga ega. Python re modulida oddiy ifodalar qo'llab-quvvatlanadi.
Agar profiling ma'lumotlarini faqat main() funksiyasiga tegishli bo'lgan qismlarini ko'rsatishni istasangiz, quyidagi kodni ishlating:
Bu yerda oddiy ifoda ochiq qavslarni o'z ichiga oladi, bu Python'ga funksiya nomi bo'yicha moslikni tekshirishni anglatadi. Agar yuqoridagi kodni o'zgartirilgan holatda qayta ishga tushirsangiz, quyidagi chiqishni ko'rasiz:
Shuningdek, pstats'ga ma'lum funksiyalar uchun chaqiruvchi va chaqirilgan funksiyalarni ham chiqarishni so'rashingiz mumkin. Misol uchun, quyidagi kodni yozib, main() funksiyasini kim chaqirganini va main() o'zi kimni chaqirganini ko'rsatish mumkin:
Bu yerda yana (main oddiy ifodasi ishlatiladi, chiqishni faqat main() funksiyasiga moslashtirish uchun. Ushbu kodni ishga tushirganingizda quyidagi chiqishni ko'rasiz:
callees blokida, main() funksiyasining quick(), average(), va super_slow() funksiyalarini chaqirganini ko'rasiz, bu esa chaqiruvchini muvaffaqiyatli aniqlaganligingizni ko'rsatadi.
Last updated on