Step 1 install
$ sudo pip install line_profiler
Step 2 add profile decorator to the function you want to profile
If I have a script called example.py that has two functions to covert the output of range function to a string list, but the 2nd function uses list comprehension:
######################################################################
@profile
def example_function(myRange):
# directly
str_list = []
for i in myRange:
str_list.append(str(i))
@profile
def example_function2(myRange):
# use list comprehension to convert range to string list
str_list = [str(i) for i in myRange]
example_function(range(1000000))
example_function2(range(1000000))
######################################################################
[20:47:55 qingkaikong]$kernprof -l -v example.py
Wrote profile results to example.py.lprof
Timer unit: 1e-06 s
Total time: 0.701441 s
File: example.py
Function: example_function at line 1
Line # Hits Time Per Hit % Time Line Contents
==============================================================
1 @profile
2 def example_function(myRange):
3 # directly convert range to string list
4 1 2 2.0 0.0 str_list = []
5 1000001 248127 0.2 35.4 for i in myRange:
6 1000000 453312 0.5 64.6 str_list.append(str(i))
Total time: 0.416699 s
File: example.py
Function: example_function2 at line 8
Line # Hits Time Per Hit % Time Line Contents
==============================================================
8 @profile
9 def example_function2(myRange):
10 # use list comprehension to convert range to string list
11 1000001 416699 0.4 100.0 str_list = [str(i) for i in myRange]
Conclusion:
Now you can see the time used for each line in the functions, and understand the benefit of using list comprehension.
Troubleshoting:
When I first install the package, and run with the kernprof script, I got the following error:
NameError: name 'profile' is not defined
Then I found the solution at: https://github.com/rkern/line_profiler/pull/25
It seems the version I installed from pip is not contain this commit, so you need apply this commit manually if you have this problem too (you will soon have no problems after the developers put this new fix on pip). For now you need do is to apply this commit:
Profile your python code nice blog post!!!
ReplyDeletetop analytics companies
Analytics for Micro Markets
Business Analytics
business data analysis
Five weeks ago my boyfriend broke up with me. It all started when i went to summer camp i was trying to contact him but it was not going through. So when I came back from camp I saw him with a young lady kissing in his bed room, I was frustrated and it gave me a sleepless night. I thought he will come back to apologies but he didn't come for almost three week i was really hurt but i thank Dr.Azuka for all he did i met Dr.Azuka during my search at the internet i decided to contact him on his email dr.azukasolutionhome@gmail.com he brought my boyfriend back to me just within 48 hours i am really happy. What’s app contact : +44 7520 636249
ReplyDelete