這是以前碰到的筆試題,當時比較緊張,腦子轉不過來,可能很多面試者都有這種經歷。現在看書時又看到這個方法,想到了之前那道面試題,簡單實現
import time
from functools import wraps
def retry(timeout=0, try_count=0):
"""
:param timeout: 超時時間
:param try_count: 重試次數
:return:
"""
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
m = 0
while m <= try_count:
try:
start = time.time()
res = func(*args, **kwargs)
end = time.time()
if end-start < timeout:
return res
else:
print("超時")
return
except Exception as e:
time.sleep(1)
m += 1
print("error: {}".format(e))
if m > try_count:
print("重試次數太多")
return inner
return wrapper
@retry(3, 3)
def hi():
# 測試超時時間
# time.sleep(3)
# return (2/2)
# 測試重試
print(1/0)
res = hi()
if res:
print(res)