Heim  >  Artikel  >  Backend-Entwicklung  >  Wie berechnet man die Ausführungszeit einer Funktion in Python?

Wie berechnet man die Ausführungszeit einer Funktion in Python?

WBOY
WBOYnach vorne
2023-04-22 09:43:072361Durchsuche

Die Python-Entwicklung erfordert manchmal eine Leistungsanalyse und Leistungsoptimierung. Zu diesem Zeitpunkt müssen Sie einige zeitaufwändige Probleme bei der Ausführung von Funktionen aufzeichnen und anschließend die Funktionslogik optimieren.

Was sind die allgemeinen Methoden in Python3?

1. Verwenden Sie time.time()

Diese Methode ist einfacher, aber wenn Sie die Ausführungszeit der Funktion genauer berechnen möchten, wird es fehlen Präzision und es gibt keine Möglichkeit, sie zu zählen. Sehr kurze Funktionen sind zeitaufwändig.

rrree<pre class="brush:php;toolbar:false">import time    def func():  time.sleep(1)    t = time.time()  func()  print(f'耗时:{time.time() - t:.4f}s')    耗时:1.0050s</pre>

2、使用time.perf_counter()

perf_counter是在python3.3新添加的,返回性能计数器的值,返回值是浮点型,统计结果包括睡眠的时间,单个函数的返回值无意义,只有多次运行取差值的结果才是有效的函数执行时间。

<pre class="brush:php;toolbar:false">import time  def func():  print('hello world')  t = time.perf_counter()  func()  print(f'耗时:{time.perf_counter() - t:.8f}s')  hello world  耗时:0.00051790s</pre>

3、使用timeit.timeit ()

<pre class="brush:php;toolbar:false">timeit()函数有5个参数:  stmt 参数是需要执行的语句,默认为 pass  setup 参数是用来执行初始化代码或构建环境的语句,默认为 pass  timer 是计时器,默认是 perf_counter()  number 是执行次数,默认为一百万  globals 用来指定要运行代码的命名空间,默认为 None   import timeit  def func():  print('hello world')  print(f'耗时: {timeit.timeit(stmt=func, number=1)}')  hello world  耗时: 0.0007705999999999824</pre>

4、使用装饰器统计

在实际项目代码中,可以通过装饰器方便的统计函数运行耗时。使用装饰器来统计函数执行耗时的好处是对函数的入侵性小,易于编写和修改。

装饰器装饰函数的方案只适用于统计函数的运行耗时,如果有代码块耗时统计的需求就不能用了,这种情况下可以使用 with 语句自动管理上下文。

(1)同步函数的统计

<pre class="brush:php;toolbar:false">import time   def coast_time(func):  def fun(*args, **kwargs):  t = time.perf_counter()  result = func(*args, **kwargs)  print(f'函数:{func.__name__} 耗时:{time.perf_counter() - t:.8f} s')  return result  return fun  @coast_time  def test():  print('hello world')  if __name__ == '__main__':  test()</pre>

(2)异步函数的统计

<pre class="brush:php;toolbar:false">import asyncio  import time  from asyncio.coroutines import iscoroutinefunction  def coast_time(func):  def fun(*args, **kwargs):  t = time.perf_counter()  result = func(*args, **kwargs)  print(f'函数:{func.__name__} 耗时:{time.perf_counter() - t:.8f} s')  return result  async def func_async(*args, **kwargs):  t = time.perf_counter()  result = await func(*args, **kwargs)  print(f'函数:{func.__name__} 耗时:{time.perf_counter() - t:.8f} s')  return result  if iscoroutinefunction(func):  return func_async  else:  return fun  @coast_time  def test():  print('hello test')  time.sleep(1)  @coast_time  async def test_async():  print('hello test_async')  await asyncio.sleep(1)  if __name__ == '__main__':  test()  asyncio.get_event_loop().run_until_complete(test_async())   hello test  函数:test 耗时:1.00230700 s  hello test_async  函数:test_async 耗时:1.00572550 s</pre>

5、with语句统计

通过实现 enter 和 exit 函数可以在进入和退出上下文时进行一些自定义动作,例如连接或断开数据库、打开或 关闭文件、记录开始或结束时间等,例如:我们用来统计函数块的执行时间。

with语句不仅可以统计代码块的执行时间,也可以统计函数的执行时间,还可以统计多个函数的执行时间之和,相比装饰器来说对代码的入侵性比较大,不易于修改,好处是使用起来比较灵活,不用写过多的重复代码。

<pre class="brush:php;toolbar:false">import asyncio  import time   class CoastTime(object):  def __init__(self):  self.t = 0  def __enter__(self):  self.t = time.perf_counter()  return self  def __exit__(self, exc_type, exc_val, exc_tb):  print(f'耗时:{time.perf_counter() - self.t:.8f} s')  def test():  print('hello test')  with CoastTime():  time.sleep(1)  async def test_async():  print('hello test_async')  with CoastTime():  await asyncio.sleep(1)  if __name__ == '__main__':  test()  asyncio.get_event_loop().run_until_complete(test_async()) hello test 耗时:1.00723310 s hello test_async 耗时:1.00366820 s</pre>

2. Verwenden Sie time.perf_counter()#🎜🎜##🎜🎜#perf_counter wurde in Python3.3 neu hinzugefügt Der Wert des Leistungsindikators ist ein Gleitkommawert. Die statistischen Ergebnisse umfassen die Ruhezeit. Der Rückgabewert einer einzelnen Funktion ist nur die effektive Ausführungszeit der Funktion. #🎜🎜##🎜🎜#rrree#🎜🎜##🎜🎜#3. Verwenden Sie timeit.timeit ()#🎜🎜##🎜🎜#rrree#🎜 🎜##🎜🎜#4. Dekoratorstatistiken verwenden#🎜🎜##🎜🎜#Im eigentlichen Projektcode können Sie den Dekorator verwenden, um die Laufzeit der Funktion bequem zu zählen. Der Vorteil der Verwendung von Dekoratoren zum Zählen der Funktionsausführungszeit besteht darin, dass sie die Funktion weniger beeinträchtigen und einfach zu schreiben und zu ändern sind. #🎜🎜##🎜🎜#Das Dekorator-Funktionsschema eignet sich nur zum Zählen der Laufzeit der Funktion. Wenn eine zeitaufwändige Statistik von Codeblöcken erforderlich ist, kann es nicht verwendet werden Verwenden Sie die with-Anweisung, um den Kontext automatisch zu verwalten. #🎜🎜#

(1) Statistik synchroner Funktionen

#🎜🎜#rrreee#🎜🎜#

(2) Statistik asynchroner Funktionen

#🎜 🎜#rrree#🎜🎜##🎜🎜#5. Mit Anweisungsstatistiken#🎜🎜##🎜🎜#Durch die Implementierung der Enter- und Exit-Funktionen können Sie beim Betreten und Verlassen des Kontos einige benutzerdefinierte Aktionen ausführen Kontext: Verbinden oder trennen Sie die Verbindung zur Datenbank, öffnen oder schließen Sie Dateien, zeichnen Sie die Start- oder Endzeit auf usw. Wir verwenden es beispielsweise, um die Ausführungszeit von Funktionsblöcken zu zählen. #🎜🎜##🎜🎜#Die with-Anweisung kann nicht nur die Ausführungszeit von Codeblöcken zählen, sondern auch die Summe der Ausführungszeiten mehrerer Funktionen Es ist relativ groß und schwierig zu ändern. Der Vorteil besteht darin, dass es flexibler zu verwenden ist und nicht zu viel wiederholten Code schreiben muss. #🎜🎜##🎜🎜#rrreee#🎜🎜#

Das obige ist der detaillierte Inhalt vonWie berechnet man die Ausführungszeit einer Funktion in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen