python重試次數裝飾器


重試次數裝飾器

前言, 最近在使用tornado框架寫Restful API時遇到很多的問題. 有框架的問題, 有異步的問題. 雖然tornado 被公認為當前python語言最好的 異步框架, 但是實際資料並沒有像 Django , flask框架那么豐富, 所以遇到很多的坑, 時很多! 這一篇主要是為了介紹一下其中在踩坑中所不得不使用的一些技術 .

問題: 個別API邏輯中存在很多的調用系統層面,或者調用第三方接口阻塞超時的操作, 為了確保 API在某一步是否最終調用成功(先不考慮API接口性能問題) 之前的做法是 遇到所有超時操作,都進行 for循環, 或者while循環, 直到 某一步 最終執行才會進行后續的邏輯. 但是 在測試過程中,發現

  • 使用for循環並不知道到底需要執行幾次
  • 使用while循環很容易造成 死循環, 最終導致程序的內存泄露, 程序崩潰.

針對不同的重試, 此時想到了 用裝飾器, 直接上代碼 如下

#!/usr/bin/env python
# ~*~ coding: utf-8 ~*~

def retry_func(retry_times=3, sleep_time=8):
    """函數重復執行次數"""

    def retry_decorator(func):
        @wraps(func)
        def wrapper_func(*args, **kwargs):
            flag = 0
            while flag < retry_times:
                res = func(*args, **kwargs)
                if not res:
                    flag += 1
                    logger.warning("{0} execute {1} times".format((func.__name__), flag))
                    time.sleep(sleep_time)
                    continue
                else:
                    return res

        return wrapper_func

    return retry_decorator
  • 裝飾器的概念及基本知識這里不再做詳解: 參考 裝飾器入門到進階

  • 找到 循環的條件及終止條件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM