python函式內計時 Python函式執行計時

2021-10-12 13:23:01 字數 1972 閱讀 5478

python函式計時

使用threading的timer定時器

from threading import timer

import time

def time_limit(interval):

def wraps(func):

def time_out():

raise runtimeerror()

def deco(*args, **kwargs):

timer = timer(interval, time_out) # interval是時限,time_out是達到實現後觸發的動作

timer.start()

res = func(*args, **kwargs)

timer.cancel()

return res

return deco

return wraps

@time_limit(5)

def time_test(run_time):

time.sleep(run_time)

if __name__ == '__main__':

time_test(7)

解釋:這其實跑了兩個執行緒。乙個是執行time_test()的主線程,乙個是用來計時的執行緒timer(interval,time_out)。當run_time>interval時,達到時限後,計時程序會觸發timer中定義的動作(例如這裡的timeout函式),但是主線程還是繼續執行,不會終止(這就說明,無法用此方法處理有些執行中可能卡死的函式)。

訊號量機制

# coding:utf-8

import time

import signal

def time_limit(interval):

def wraps(func):

def handler(signum, frame):

# print signum

raise runtimeerror()

def deco(*args, **kwargs):

signal.signal(signal.sigalrm, handler)

signal.alarm(interval)

res = func(*args, **kwargs)

signal.alarm(0)

return res

return deco

return wraps

@time_limit(2)

def time_test(time_interval):

time.sleep(time_interval)

print '------'

if __name__ == '__main__':

try:

time_test(5)

except runtimeerror:

print 'stop ...'

解釋:這裡是用了訊號量機制,signal.alarm(interval)設定超時間隔,signal.signal(signal.sigalrm, handler)中的handler是超時後觸發的動作。需要在handler中引發異常,否則無法終止time_test()函式,handler中raise的異常可以通過time_test來捕獲,這樣可以終止time_test函式,在進行其他的處理。

問題:handler函式中兩個引數好像是必須要有的,否則就報錯。

問題:實際應用中,由於是多執行緒,而signal不能在子執行緒中使用,也就是說,上例中@time_limit(2)所裝飾的函式time_test必須是在主線程中才可以的。

from timeout import timeout方法

可以直接pip install timeout,然後from timeout import timeout,在需要的函式前@timeout(n)即可.

問題:這個timeout同樣不能用於子執行緒,根據使用報錯判斷,其原理應該與signal是一致的。

2017.08.19

python計時函式 python計時函式

技術文件 一屏 使用者滑動螢幕至主體內容展現結束之前,在頁面任意位置停留時看到的所有內容,稱為一屏。移動端適配 為了使pc頁面能夠在移動端正常展現的手段,保證使用者不需要縮小 放大 左右滑動即可看清全部字型。廣告 指為了某種特定的需要,通過一定形式的 公開且廣泛地向公眾傳遞資訊的宣傳手段 本 中的廣...

python中內建函式 python常用內建函式

1.map函式 對指定序列對映到指定函式,返回結果集 a 1,3,5 b 2,4,6 def mf x,y return x y map none,a,b 1,2 3,4 5,6 map mf,a,b 2,12,30 list map lambda x,y x y,1,2,3 4,5,6 5,7,9...

python 內函式 Python 常見內建函式

map map 會根據提供的函式對指定序列做對映。第乙個引數 function 以引數序列中的每乙個元素呼叫 function 函式,返回包含每次 function 函式返回值的新列表。在python2中返回列表,在python3中返回迭代器。def square x return x 2 prin...