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...