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.
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.
<div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">Salin selepas log masuk</div></div>
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.
<div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">Salin selepas log masuk</div></div>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">Salin selepas log masuk</div></div>
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
<div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">Salin selepas log masuk</div></div>
(2) Statistik fungsi tak segerak
<div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">Salin selepas log masuk</div></div>
5. Dengan statistik pernyataan
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!