成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python函數(shù)執(zhí)行時間的簡單介紹

7種檢測Python程序運(yùn)行時間、CPU和內(nèi)存占用的方法

1. 使用裝飾器來衡量函數(shù)執(zhí)行時間

天柱網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,天柱網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為天柱上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的天柱做網(wǎng)站的公司定做!

有一個簡單方法,那就是定義一個裝飾器來測量函數(shù)的執(zhí)行時間,并輸出結(jié)果:

import time

from functoolsimport wraps

import random

def fn_timer(function):

@wraps(function)

def function_timer(*args, **kwargs):

? t0= time.time()

? result= function(*args, **kwargs)

? t1= time.time()

? print("Total time running %s: %s seconds" %

? ? ? (function.__name__, str(t1- t0))

)

? return result

return function_timer

@fn_timer

def random_sort(n):

return sorted([random.random() for i in range(n)])

if __name__== "__main__":

random_sort(2000000)

輸出:Total time running random_sort: 0.6598007678985596 seconds

使用方式的話,就是在要監(jiān)控的函數(shù)定義上面加上 @fn_timer 就行了

或者

# 可監(jiān)控程序運(yùn)行時間

import time

import random

def clock(func):

def wrapper(*args, **kwargs):

? ? start_time= time.time()

? ? result= func(*args, **kwargs)

? ? end_time= time.time()

? ? print("共耗時: %s秒" % round(end_time- start_time, 5))

? ? return result

return wrapper

@clock

def random_sort(n):

return sorted([random.random() for i in range(n)])

if __name__== "__main__":

random_sort(2000000)

輸出結(jié)果:共耗時: 0.65634秒

2. 使用timeit模塊

另一種方法是使用timeit模塊,用來計(jì)算平均時間消耗。

執(zhí)行下面的腳本可以運(yùn)行該模塊。

這里的timing_functions是Python腳本文件名稱。

在輸出的末尾,可以看到以下結(jié)果:4?loops, best of?5:?2.08?sec per loop

這表示測試了4次,平均每次測試重復(fù)5次,最好的測試結(jié)果是2.08秒。

如果不指定測試或重復(fù)次數(shù),默認(rèn)值為10次測試,每次重復(fù)5次。

3. 使用Unix系統(tǒng)中的time命令

然而,裝飾器和timeit都是基于Python的。在外部環(huán)境測試Python時,unix time實(shí)用工具就非常有用。

運(yùn)行time實(shí)用工具:

輸出結(jié)果為:

Total?time running random_sort:?1.3931210041?seconds

real?1.49

user?1.40

sys?0.08

第一行來自預(yù)定義的裝飾器,其他三行為:

real表示的是執(zhí)行腳本的總時間

user表示的是執(zhí)行腳本消耗的CPU時間。

sys表示的是執(zhí)行內(nèi)核函數(shù)消耗的時間。

注意:根據(jù)維基百科的定義,內(nèi)核是一個計(jì)算機(jī)程序,用來管理軟件的輸入輸出,并將其翻譯成CPU和其他計(jì)算機(jī)中的電子設(shè)備能夠執(zhí)行的數(shù)據(jù)處理指令。

因此,Real執(zhí)行時間和User+Sys執(zhí)行時間的差就是消耗在輸入/輸出和系統(tǒng)執(zhí)行其他任務(wù)時消耗的時間。

4. 使用cProfile模塊

5. 使用line_profiler模塊

6. 使用memory_profiler模塊

7. 使用guppy包

python長時間運(yùn)行 時間不準(zhǔn)

python長時間運(yùn)行 時間不準(zhǔn)調(diào)整設(shè)置就可以。

這是因?yàn)?,run 函數(shù)不是一瞬間就運(yùn)行完成的。它運(yùn)行也會消耗時間。

可以使用1秒作為deltatime。如果涉及到更精確的時間,則還是需要用time.time()來計(jì)算循環(huán)初始時間,然后在循環(huán)結(jié)尾計(jì)算中間的時間差來獲得更精準(zhǔn)的deltatime。

在python里用time.time判斷函數(shù)的執(zhí)行時間靠譜嗎

使用time.time來統(tǒng)計(jì)函數(shù)的執(zhí)行時間,程序只會執(zhí)行一次,存在很大的隨機(jī)因素。

timtit包就可以重復(fù)執(zhí)行函數(shù)多次,然后將多次執(zhí)行結(jié)果取平均值。相比起來更優(yōu)。

然而程序執(zhí)行時間很大程度還受計(jì)算機(jī)性能的影響,衡量程序好壞更靠譜的手段是計(jì)算時間復(fù)雜度。

python 打印出函數(shù)執(zhí)行所用時間

使用timeit模塊,先介紹下:

timeit 模塊

timeit?模塊定義了接受兩個參數(shù)的?Timer?類。兩個參數(shù)都是字符串。 第一個參數(shù)是你要計(jì)時的語句或者函數(shù)。 傳遞給?Timer?的第二個參數(shù)是為第一個參數(shù)語句構(gòu)建環(huán)境的導(dǎo)入語句。 從內(nèi)部講,?timeit?構(gòu)建起一個獨(dú)立的虛擬環(huán)境, 手工地執(zhí)行建立語句,然后手工地編譯和執(zhí)行被計(jì)時語句。

一旦有了?Timer?對象,最簡單的事就是調(diào)用?timeit(),它接受一個參數(shù)為每個測試中調(diào)用被計(jì)時語句的次數(shù),默認(rèn)為一百萬次;返回所耗費(fèi)的秒數(shù)。

Timer?對象的另一個主要方法是?repeat(), 它接受兩個可選參數(shù)。 第一個參數(shù)是重復(fù)整個測試的次數(shù),第二個參數(shù)是每個測試中調(diào)用被計(jì)時語句的次數(shù)。 兩個參數(shù)都是可選的,它們的默認(rèn)值分別是?3?和?1000000。?repeat()?方法返回以秒記錄的每個測試循環(huán)的耗時列表。Python?有一個方便的?min?函數(shù)可以把輸入的列表返回成最小值,如: min(t.repeat(3, 1000000))

你可以在命令行使用?timeit?模塊來測試一個已存在的?Python?程序,而不需要修改代碼。

再給你個例子,你就知道怎么做了。

#?-*-?coding:?utf-8?-*-

#!/bin/env?python

def?test1():

n=0

for?i?in?range(101):

n+=i

return?n

def?test2():

return?sum(range(101))

def?test3():

return?sum(x?for?x?in?range(101))

if?__name__=='__main__':

from?timeit?import?Timer

t1=Timer("test1()","from?__main__?import?test1")

t2=Timer("test2()","from?__main__?import?test2")

t3=Timer("test3()","from?__main__?import?test3")

print?t1.timeit(1000000)

print?t2.timeit(1000000)

print?t3.timeit(1000000)

print?t1.repeat(3,1000000)

print?t2.repeat(3,1000000)

print?t3.repeat(3,1000000)

python函數(shù)深入淺出 16.time.sleep()函數(shù)詳解

time.sleep() 函數(shù)命名來源于英文單詞time(時間)和sleep(睡眠)。

time 是python帶的非內(nèi)置庫,使用時需要import,主要用于處理和時間相關(guān)的操作。

time.sleep用于給定時間內(nèi)掛起(等待)當(dāng)前線程的執(zhí)行。

time.sleep() 函數(shù)的例子:

可以注釋掉time.sleep(2)再運(yùn)行一次對比一下

可以看到雖然都是打印出一樣的結(jié)果,但time.sleep()加入了等待時間

這里還要解釋一下python中線程與進(jìn)程的區(qū)別。

舉個例子,廚房做菜看成是一個進(jìn)程,那么這個進(jìn)程下面就可能有多個人或一個人(cpu基本執(zhí)行單元,即線程)來執(zhí)行,多個人可以分別洗菜,刷碗,擺盤等等同時作業(yè),他們又是共享這個廚房的資源的。每個人存在一定的資源競爭關(guān)系,比如爐火只有1個。

這里time.sleep是針對線程執(zhí)行的,也就是其中一個人去sleep睡覺了,不影響其他人的繼續(xù)工作。

參數(shù)

該函數(shù)沒有返回值。

結(jié)果類似如下:

可以看到秒數(shù)相差了5

time.sleep()常用于推遲執(zhí)行的場景

在python中,與時間相關(guān)的模塊有:time,datetime以及calendar

對基礎(chǔ)運(yùn)行環(huán)境有疑問的,推薦參考: python函數(shù)深入淺出 0.基礎(chǔ)篇

如何讓python 腳本在指定的時間內(nèi)運(yùn)行?

最簡單的:\x0d\x0a寫一個python腳本\x0d\x0a加一個死循環(huán),判斷時間。\x0d\x0a如果到了指定的時間,就運(yùn)行一次,然后在進(jìn)入死循環(huán)。\x0d\x0a當(dāng)然不是要你真搞個死循環(huán)占用CPU,你可以用sleep函數(shù)。不占用CPU。\x0d\x0a每次sleep 10s。。\x0d\x0a加個啟動項(xiàng),每次開機(jī)啟動這個腳本就行了。

本文題目:python函數(shù)執(zhí)行時間的簡單介紹
瀏覽地址:http://jinyejixie.com/article20/hehsjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、品牌網(wǎng)站建設(shè)、定制網(wǎng)站搜索引擎優(yōu)化、電子商務(wù)、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
宣化县| 新安县| 神农架林区| 陇南市| 衡山县| 治县。| 惠水县| 清新县| 铜鼓县| 正镶白旗| 合水县| 尼勒克县| 临漳县| 卓尼县| 孝感市| 宝山区| 航空| 达孜县| 琼海市| 沭阳县| 连州市| 城市| 鹰潭市| 定安县| 肇庆市| 琼中| 岳阳市| 天全县| 大城县| 莲花县| 澜沧| 曲沃县| 潜江市| 绥德县| 桃园县| 曲周县| 札达县| 昂仁县| 田林县| 浮梁县| 叶城县|