Python profiling decorator

前幾天想知道我 Django 程式裡某段函式的瓶頸,所以查了 Django 怎麼做 profiling 。是有查到有 jazzband/silk: Silky smooth profiling for Django 這個 package ,但是有點太大。如果是用常找到的

python -m cProfile xxx.py xxx.py

,Django 程式又不太適合。畢竟我只是想查某個函式而已。所以後來查到這兩個 decorator:

使用上很簡單,程式放進去,在想做 profiling 的函式前加上 decorator 就可以了。

我用的是第一個,在加上 decorator,執行過程式(應該說是瀏覽網頁)以後,在程式當前資料夾裡會找到 .profile 的檔案,為了後續方便說明,假設產生出來是 func.profile 。有這個檔案以後,就可以用

python -m pstats func.profile

開啟,開啟以後,是 pstats 的 shell ,一般要查哪個地方花的時間最多,會用

sort time

依照執行花費時間來排序,再用

stats 10

列出前十個花費時間最多的函式。

參考資料: