I usually write codes(functions) on www.codefights.com as a competitor.So speed is one of the important part of the code . How can i measure the speed of a certain code in python language whether it is the lambda function or a def function .
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Have a look at the timeit module in pythons standard libaray:
https://docs.python.org/2/library/timeit.html
>>> import timeit >>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000) 0.8187260627746582 >>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000) 0.7288308143615723 >>> timeit.timeit('"-".join(map(str, range(100)))', number=10000) 0.5858950614929199
To give the timeit module access to functions you define, you can pass a setup parameter which contains an import statement:
def test(): """Stupid test function""" L = [] for i in range(100): L.append(i) if __name__ == '__main__': import timeit print(timeit.timeit("test()", setup="from __main__ import test"))
回答2:
In 3 Step ;)
Step 1: install line_profiler
pip install line_profiler
Step 2: Add @profile
to your code:
from time import sleep @profile def so_slow(bar): sleep(5) return bar if __name__ == "__main__": so_slow(5)
Step 3: Test your code:
kernprof -l -v your_code.py
Result
Wrote profile results to your_code.py.lprof Timer unit: 1e-06 s Total time: 5.00283 s File: your_code.py Function: so_slow at line 4 Line # Hits Time Per Hit % Time Line Contents ============================================================== 4 @profile 5 def so_slow(bar): 6 1 5002830 5002830.0 100.0 sleep(5) 7 1 2 2.0 0.0 return bar
memory_profiler
You can use memory_profiler
too, Install it, add profile and call it:
pip install memory_profiler python -m memory_profiler your_code.py
Result:
Filename: your_code.py Line # Mem usage Increment Line Contents ================================================ 4 21.289 MiB 0.000 MiB @profile 5 def so_slow(bar): 6 21.289 MiB 0.000 MiB sleep(5) 7 21.289 MiB 0.000 MiB return bar
Update:
You can use objgraph to find memory leak
or draw a graph of your code:
from time import sleep import objgraph x = [1] objgraph.show_backrefs([x], filename='sample-backref-graph.png') def so_slow(bar): sleep(5) return bar if __name__ == "__main__": so_slow(5)
Result:
Reference : A guide to analyzing Python performance
回答3:
You can use it in ipython and use the %time to see the allocation time needed for the execution of the function :
回答4:
For instance:
import timeit def a(): return 1+1 print timeit.timeit(a, number=1000000)