目錄前言, 最近在使用tornado框架寫restful api時遇到很多的問題. 有框架的問題, 有非同步的問題. 雖然tornado
被公認為當前python語言最好的 非同步框架, 但是實際資料並沒有像django
,flask
框架那麼豐富, 所以遇到很多的坑, 時很多! 這一篇主要是為了介紹一下其中在踩坑中所不得不使用的一些技術
.
問題: 個別api邏輯中存在很多的呼叫系統層面,或者呼叫第三方介面阻塞超時的操作, 為了確保 api在某一步是否最終呼叫成功(先不考慮api介面效能問題) 之前的做法是 遇到所有超時操作,都進行 for迴圈, 或者while迴圈, 直到某一步
最終執行才會進行後續的邏輯. 但是 在測試過程中,發現
針對不同的重試, 此時想到了 用裝飾器, 直接上** 如下
#!/usr/bin/env python
# ~*~ coding: utf-8 ~*~
def retry_func(retry_times=3, sleep_time=8):
"""函式重複執行次數"""
def retry_decorator(func):
@wraps(func)
flag = 0
while flag < retry_times:
res = func(*args, **kwargs)
if not res:
flag += 1
logger.warning(" execute times".format((func.__name__), flag))
time.sleep(sleep_time)
continue
else:
return res
return retry_decorator
Shiro密碼重試次數限制
如在 1 個小時內密碼最多重試 5 次,如果嘗試次數超過 5 次就鎖定 1 小時,1 小時後可再次重試,如果還是重試失敗,可以鎖定如 1 天,以此類推,防止密碼被暴力破解。我們通過繼承 hashedcredentialsmatcher,且使用 ehcache 記錄重試次數和超時時間。public b...
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...
使用裝飾器實現失敗的方法重試
前幾天,遇到乙個人問我如果在自動化測試框架中,case失敗了需要重試要怎麼處理?我當時腦海中的第一反應,就是使用unittest自帶的失敗重試機制來實現。但是事後我查了一下,發現unittest並沒有這種機制,要是需要的話只能自己修改原始碼 最近在看這部分的原始碼,下次可以整理下這種方式來實現 所以...