Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengira masa pelaksanaan fungsi dalam Python?

Bagaimana untuk mengira masa pelaksanaan fungsi dalam Python?

WBOY
WBOYke hadapan
2023-04-22 09:43:072361semak imbas

Pembangunan python kadangkala memerlukan analisis prestasi dan pengoptimuman prestasi Pada masa ini, anda perlu merekodkan beberapa isu masa pelaksanaan fungsi yang memakan masa, dan kemudian mengoptimumkan logik fungsi.

Apakah kaedah umum dalam python3.

1. Gunakan time.time()

Kaedah ini lebih mudah, tetapi jika anda ingin mengira masa pelaksanaan fungsi dengan lebih tepat, akan ada kekurangan ketepatan, dan ada bukan cara untuk mengira masa yang sangat singkat. Fungsi ini memerlukan masa.

<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 Gunakan time.perf_counter()

perf_counter baru ditambahkan dalam python3.3 dan mengembalikan nilai pembilang prestasi Jenis titik terapung, keputusan statistik termasuk masa tidur, nilai pulangan fungsi tunggal tidak bermakna, hanya hasil perbezaan beberapa larian ialah masa pelaksanaan fungsi yang berkesan.

<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 Gunakan 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 kod projek sebenar, penghias boleh mengira masa berjalan fungsi dengan mudah. Kelebihan menggunakan penghias untuk mengira masa pelaksanaan fungsi ialah ia kurang mengganggu fungsi dan mudah untuk menulis dan mengubah suai.

Skim fungsi menghias dengan penghias hanya sesuai untuk mengira masa berjalan fungsi Jika terdapat keperluan untuk statistik blok kod yang memakan masa, ia tidak boleh digunakan pernyataan dengan untuk mengurus konteks secara automatik.

(1) Statistik fungsi segerak

<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) Statistik fungsi tak segerak

<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. Dengan statistik pernyataan

Dengan melaksanakan fungsi masuk dan keluar, anda boleh melakukan beberapa tindakan tersuai apabila memasuki dan keluar dari konteks, seperti menyambung atau memutuskan sambungan pangkalan data, membuka atau menutup fail, merekod permulaan atau tamat masa, dsb., contohnya: Kami menggunakannya untuk mengira masa pelaksanaan blok fungsi.

Pernyataan dengan bukan sahaja boleh mengira masa pelaksanaan blok kod, tetapi juga masa pelaksanaan fungsi, dan juga boleh mengira jumlah masa pelaksanaan berbilang fungsi Berbanding dengan penghias, ia lebih mengganggu kepada kod, tidak mudah untuk diubah suai Kelebihannya ialah ia lebih fleksibel untuk digunakan dan tidak perlu menulis terlalu banyak kod berulang.

Atas ialah kandungan terperinci Bagaimana untuk mengira masa pelaksanaan fungsi dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam