line_profiler
是一個對函數進行逐行分析的模塊,kernprof
是一個可以運行line_profiler
或者python標準庫cProfile
的一個很方便的腳本工具。
安裝:
$ pip install line_profiler
遇到錯誤提示沒有Cpython,安裝一下:
pip install Cpython
繼續報錯:command 'x86_64-linux-gnu-gcc' failed with exit status 1
解決方案:https://github.com/scrapy/scrapy/issues/2115
裏面的sudo apt install python3.6-dev
解決了問題
首先使用kernprof腳本運行來開始我們的性能優化工作:
kernprof -l run.py
上面的操作會創建一個LineProfiler
的實例並且會把它插入到命名空間裏面。然後它能以裝飾器的方式來使用,所以我們只需要把我們需要分析的函數上面套上這個裝飾器:
@profile
def func_need_profile(*args, **kwargs):
...
這裏直接加上裝飾器,不需要在代碼裏面額外import任何東西。
kernprof
會把分析的結果放在script_to_profile.py.lprof
這個二進制文件裏面,然後我們可以去看這個分析結果:
python -m line_profiler run.py.lprof