How to measure the speed of a python function

匿名 (未验证) 提交于 2019-12-03 09:06:55

问题:

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) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!