亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python retrying模塊的使用方法詳解

發布時間:2020-09-29 21:36:23 來源:腳本之家 閱讀:147 作者:python學習開發 欄目:開發技術

前言

我們在寫爬蟲的過程中,經常遇到爬取失敗的情況,這個時候我們一般會通過try塊去進行重試,但是每次都寫那么一堆try塊,真的是太麻煩,所以今天就來說一個比較pythonic的模塊,retrying.

安裝

retrying模塊的安裝很簡單直接用匹配安裝即可。

pip install retrying

retring模塊通過裝飾器的形式來進行重試操作的,首先我們看一個簡單的例子

from retrying import retry
@retry(stop_max_attempt_number=5,wait_random_min=1000,wait_random_max=5000)
def run():
  print("開始重試")
  raise NameError

if __name__ == '__main__':
  run()

上面的代碼干了哪些事呢,首先導入retring的retry模塊

然后裝飾一個run函數,然后調用run,函數內容很簡單就是通過raise拋出一個異常,執行該代碼我們發現。程序打印了五次開始重試,最后一次拋出異常,NameError。

到這里我們可以感受到重試了,就是這么簡單的代碼,就完成了五次重試,同時這五次重試的間隔時間也是不同的。

如果想嘗試10次就把上面的stop_max_attempt_number=5,改成10即可,到這里就可以解釋retry裝飾器的參數了

stop_max_attempt_number:最大重試次數,超過這個次數會停止重試,并報異常。

wait_random_min:隨機等待最小時間。

wait_random_max:隨機等待最大時間。

好了retry的使用就是這么簡單,在需要重試的函數上面加個裝飾器就好了。

關鍵是裝飾器里的參數的使用,下面列舉了retrying的參數。

如果不寫參數將會一直重試.

stop_max_attempt_number:在停止之前嘗試的最大次數,最后一次如果還是有異常則會拋出異常,停止運行,默認為5次

@retry(stop_max_attempt_number=5)
def run():
  print("開始重試")
  raise NameError

if __name__ == '__main__':
  run()

強調總次數。

stop_max_delay:最大延遲時間,大概意思就是:如果調用的函數出現異常,那么就會重復調用這個函數,最大調用時間,默認為100毫秒

from retrying import retry
@retry(stop_max_delay=5000)
def run():
  print("開始重試")
  raise NameError
if __name__ == '__main__':
  run()

會重試5秒鐘,強調總時間。

wait_fixed:兩次調用方法期間停留時長, 如果出現異常則會一直重復調用,默認 1000毫秒

from retrying import retry
@retry(wait_fixed=2000)
def run():
  print("開始重試")
  raise NameError
if __name__ == '__main__':
  run()

強調間隔時間。

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

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

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

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

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

from retrying import retry
def run2(exception):
  return isinstance(exception, ZeroDivisionError)
@retry(retry_on_exception=run2)
def run():
  print("開始重試")
  a = 1 / 0
if __name__ == '__main__':
  run()

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

from retrying import retry
def run2(r):
  return isinstance(r, int)
@retry(retry_on_result=run2)
def run():
  print("開始重試")
  a = 1
  return a
if __name__ == '__main__':
  run()

wrap_exception:參數設置為True/False,如果指定的異常類型,包裹在RetryError中,會看到RetryError和程序拋的Exception error

stop_func: 每次拋出異常時都會執行的函數,如果和stop_max_delay、stop_max_attempt_number配合使用,則后兩者會失效

指定的stop_func會有兩個參數:attempts, delay

wait_func:和stop_func用法差不多,不多描述

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃江县| 通山县| 赞皇县| 新绛县| 定边县| 彭州市| 衢州市| 宁蒗| 新安县| 鸡东县| 静宁县| 瑞昌市| 克拉玛依市| 杭州市| 大关县| 海晏县| 霍林郭勒市| 徐闻县| 榆社县| 沁源县| 日照市| 泌阳县| 九寨沟县| 库尔勒市| 莫力| 新龙县| 鹤庆县| 揭西县| 宜丰县| 天台县| 土默特右旗| 涟水县| 农安县| 军事| 涪陵区| 江西省| 隆林| 深圳市| 阿图什市| 安阳市| 岗巴县|