Learning How to Profile with cProfile

Python Profiling Your Code

SU

cProfile bilan Kodni Tahlil Qilishni O'rganish

Birinchi qadam - profiling qilish uchun nimadir topish. Yaxshiyamki, boshlash juda oson. Python’dagi deyarli har qanday modulni import qilib, uni cProfile yordamida tahlil qilishingiz mumkin.

Keling, Pythonning secrets modulini sinab ko'raylik, bu modul kriptografik jihatdan kuchli tasodifiy raqamlar yaratish uchun ishlatiladi:

>>> import secrets
>>> import cProfile
>>> cProfile.run("secrets.token_bytes(16)")

Chiqishi quyidagicha bo'ladi:

5 function calls in 0.000 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
1      0.000    0.000    0.000    0.000    <string>:1(<module>)
1      0.000    0.000    0.000    0.000    secrets.py:35(token_bytes)
1      0.000    0.000    0.000    0.000    {built-in method builtins.exec}
1      0.000    0.000    0.000    0.000    {built-in method posix.urandom}
1      0.000    0.000    0.000    0.000    {method 'disable' of '_lsprof.Profiler'}

Bu yerda secrets va cProfile modullarini import qilasiz. Keyin, secrets.token_bytes(16) ni tahlil qilish uchun uni qo'shtirnoqlar ichida yozib, cProfile.run() ga uzatasiz. Yuqoridagi chiqishdan ko'rinib turibdiki, funksiyalar faqat bir marta chaqirildi va hech qanday aniq tor joylar mavjud emas.

Endi chiqishdagi har bir ma'lumotni tahlil qilib ko'raylik:

  • ncalls - chaqiruvlar soni, ya'ni funksiya nechta marta chaqirilgan
  • tottime - berilgan funksiyada sarflangan umumiy vaqt
  • percall - tottime ning ncalls ga bo'lingan qiymati
  • cumtime - funksiya va uning barcha kichik funksiyalarida sarflangan umumiy vaqt
  • percall - ikkinchi percall qiymati, ya'ni cumtime ning asosiy chaqiruvlar soniga bo'lingan qiymati
  • filename:lineno(function) - har bir chaqiruv uchun fayl nomi va satr raqami haqida ma'lumot
  • primitive call - rekursiya natijasida bo'lmagan chaqiruvlar

Bu misol juda qiziqarli emas, chunki hamma narsa faqat bir marta chaqirilib, aniq bottlenecklar yo'q.

Endi profilingdan qanday foyda olish mumkinligini ko'rish uchun biroz boshqa kod yozaylik!

Last updated on

On this page

Xato haqida xabar berish