Python異常失敗重試模塊:retrying,python爬蟲必備利器

從之前寫的 【Python登陸小米路由器撥號更換IP,繞過網站反爬IP限制機制】我們就可以看到python有一種重試機制,很好用。特別是在寫爬蟲的時候,簡直是python爬蟲必備利器。

工作中也經常碰到的問題就是,某個方法出現了異常,重試幾次。循環重複一個方法是很常見的。比如爬蟲中的獲取代理,對獲取失敗的情況進行重試。或者是python爬蟲爬取網頁的內容的時候出現錯誤,也需要使用重試等,在爬蟲領域,這個模塊應該還是很不錯的。

Python異常失敗重試模塊:retrying,python爬蟲必備利器

人生苦短啊

安裝retrying模塊

<code>pip install retrying #安裝/<code>

retrying提供一個裝飾器函數retry,被裝飾的函數會在運行失敗的情況下重新執行,默認一直報錯就一直重試。我們先看下我們之前的一段代碼:

<code>from retrying import retry
@retry(stop_max_attempt_number=50000,wait_fixed=2000)
def tyc():
\t#代碼
\t
if __name__ == '__main__':
tyc()/<code>

這個裡面retry的裝飾器,有2個參數,stop_max_attempt_number 代表最大重試次數,wait_fixed 代碼,間隔多久進行重試。

retry常用參數相關

他的其他參數用法有,我羅列一些我開發過程常用的給大家,希望對大家有幫助,基本上這些都夠用了:

<code># 設置方法的最大延遲時間,默認為100毫秒(是執行這個方法重試的總時間)
@retry(stop_max_attempt_number=5,stop_max_delay=50)/<code>
<code># 添加每次方法執行之間的等待時間
@retry(stop_max_attempt_number=5,wait_fixed=2000)
# 隨機的等待時間

@retry(stop_max_attempt_number=5,wait_random_min=100,wait_random_max=2000)
# 每調用一次增加固定時長
@retry(stop_max_attempt_number=5,wait_incrementing_increment=1000)/<code>

其他的還有參數:

1、stop_max_attempt_number 在停止之前嘗試的最大次數,最後一次如果還是有異常則會拋出異常,停止運行

2、stop_max_delay 最大延遲時間

3、wait_fixed:兩次調用方法期間停留時長,默認1000毫秒,1秒

4、wait_random_min:在兩次調用方法停留時長,停留最短時間,默認為0

5、wait_random_max:在兩次調用方法停留時長,停留最長時間,默認為1000毫秒

6、wait_incrementing_increment:每調用一次則會增加的時長,默認 100毫秒

7、wait_exponential_multiplierwait_exponential_max:以指數的形式產生兩次retrying之間的停留時間,產生的值為2^previous_attempt_number * wait_exponential_multiplier,previous_attempt_number是前面已經retry的次數,如果產生的這個值超過了wait_exponential_max的大小,那麼之後兩個retrying之間的停留值都為wait_exponential_max

8、retry_on_exception: 指定一個函數,如果此函數返回指定異常,則會重試,如果不是指定的異常則會退出

9、retry_on_result:指定一個函數,如果指定的函數返回True,則重試,否則拋出異常退出

使用比較簡單,用的最多的不外乎:stop_max_attempt_number,stop_max_delay 這兩個。其他還有一些,大家可以去參考文檔。

好了,就這麼多啦,我是迷神,更多精彩,記得關注我哦,請多多轉發,有問題也可以評論哦。


分享到:


相關文章: