成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python之retrying

馬龍駒 / 1678人閱讀

摘要:是一個很好用的關(guān)于重試的包,可以用來自動重試一些可能會運(yùn)行失敗的程序段。就是一個可以用來應(yīng)對上述問題的工具,可以在上獲得。這個設(shè)計迎合了算法,可以減輕阻塞的情況。

retrying是一個很好用的關(guān)于重試的Python包,可以用來自動重試一些可能會運(yùn)行失敗的程序段。

為什么選擇retrying

我們在寫一些程序的時候,會去調(diào)用一些外部資源、組件,這些外部程序?qū)ξ覀儊碚f是不可控的,所以它們不可用、運(yùn)行失敗都是正常的事情,尤其是在網(wǎng)絡(luò)上多個服務(wù)交互的時候,在寫程序的時候一定要考慮調(diào)用外部程序會失敗的情況。

retrying

retrying就是一個可以用來應(yīng)對上述問題的工具,可以在PyPi上獲得。
retrying提供一個裝飾器函數(shù)retry,被裝飾的函數(shù)就會在運(yùn)行失敗的條件下重新執(zhí)行,默認(rèn)只要一直報錯就會不斷重試,看一下下面的例子:

import random
from retrying import retry

@retry
def have_a_try():
    if random.randint(0, 10) != 5:
        raise Exception("It"s not 5!")
    print "It"s 5!"

如果我們運(yùn)行have_a_try函數(shù),那么直到random.randint返回5,它才會執(zhí)行結(jié)束,否則會一直重新執(zhí)行。
retry還可以接受一些參數(shù),這個從源碼中Retrying類的初始化函數(shù)可以看到可選的參數(shù):

    def __init__(self,
                 stop=None, wait=None,
                 stop_max_attempt_number=None,
                 stop_max_delay=None,
                 wait_fixed=None,
                 wait_random_min=None, wait_random_max=None,
                 wait_incrementing_start=None, wait_incrementing_increment=None,
                 wait_exponential_multiplier=None, wait_exponential_max=None,
                 retry_on_exception=None,
                 retry_on_result=None,
                 wrap_exception=False,
                 stop_func=None,
                 wait_func=None,
                 wait_jitter_max=None)

stop_max_attempt_number:用來設(shè)定最大的嘗試次數(shù),超過該次數(shù)就停止重試

stop_max_delay:比如設(shè)置成10000,那么從被裝飾的函數(shù)開始執(zhí)行的時間點開始,到函數(shù)成功運(yùn)行結(jié)束或者失敗報錯中止的時間點,只要這段時間超過10秒,函數(shù)就不會再執(zhí)行了

wait_fixed:設(shè)置在兩次retrying之間的停留時間

wait_random_minwait_random_max:用隨機(jī)的方式產(chǎn)生兩次retrying之間的停留時間

wait_exponential_multiplierwait_exponential_max:以指數(shù)的形式產(chǎn)生兩次retrying之間的停留時間,產(chǎn)生的值為2^previous_attempt_number * wait_exponential_multiplier,previous_attempt_number是前面已經(jīng)retry的次數(shù),如果產(chǎn)生的這個值超過了wait_exponential_max的大小,那么之后兩個retrying之間的停留值都為wait_exponential_max。這個設(shè)計迎合了exponential backoff算法,可以減輕阻塞的情況。

我們可以指定要在出現(xiàn)哪些異常的時候再去retry,這個要用retry_on_exception傳入一個函數(shù)對象:

def retry_if_io_error(exception):
    return isinstance(exception, IOError)

@retry(retry_on_exception=retry_if_io_error)
def read_a_file():
    with open("file", "r") as f:
        return f.read()

在執(zhí)行read_a_file函數(shù)的過程中,如果報出異常,那么這個異常會以形參exception傳入retry_if_io_error函數(shù)中,如果exceptionIOError那么就進(jìn)行retry,如果不是就停止運(yùn)行并拋出異常。

我們還可以指定要在得到哪些結(jié)果的時候去retry,這個要用retry_on_result傳入一個函數(shù)對象:

def retry_if_result_none(result):
    return result is None

@retry(retry_on_result=retry_if_result_none)
def get_result():
    return None

在執(zhí)行g(shù)et_result成功后,會將函數(shù)的返回值通過形參result的形式傳入retry_if_result_none函數(shù)中,如果返回值是None那么就進(jìn)行retry,否則就結(jié)束并返回函數(shù)值。

參考資料

Get back up and try again: retrying in Python

retrying

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/37650.html

相關(guān)文章

  • 如何實現(xiàn)一個Python爬蟲框架

    摘要:這篇文章的題目有點大,但這并不是說我自覺對爬蟲這塊有多大見解,我只不過是想將自己的一些經(jīng)驗付諸于筆,對于如何寫一個爬蟲框架,我想一步一步地結(jié)合具體代碼來講述如何從零開始編寫一個自己的爬蟲框架年到如今,我花精力比較多的一個開源項目算是了,這是 showImg(https://segmentfault.com/img/remote/1460000018513379); 這篇文章的題目有點大...

    feng409 評論0 收藏0
  • Python重試機(jī)制是什么,下文給大家解答

      小編寫這篇文章的主要目的,主要是給大家講解一下,關(guān)于Python機(jī)制的一些問題,比如重新調(diào)試的機(jī)制是什么呢?應(yīng)用到它的場景還是很多的,下面跟小編一塊去學(xué)習(xí)吧?! 〗榻B:  為了避免網(wǎng)絡(luò)問題出現(xiàn)的錯誤,比如網(wǎng)絡(luò)延遲或者是宕機(jī),往往都會出現(xiàn)請求超時的問題?! ∵@里要給大家介紹的是一個第三方庫-Tenacity(標(biāo)題中的重試機(jī)制并并不準(zhǔn)確,它不是Python的內(nèi)置模塊,因此并不能稱之為機(jī)制),它實現(xiàn)...

    89542767 評論0 收藏0
  • 解決樹莓派下載django的TypeError:..... Retry and int 問題

    摘要:沒報錯但依然無法安裝使用再次安裝無果感謝大神的分享我才發(fā)覺這是一個新手的通用問題樹莓派自帶的系統(tǒng)附帶了一個來自前寒武紀(jì)的版本,如果您不想花費(fèi)數(shù)小時來調(diào)試與相關(guān)的問題,那么就必須升級它。 諸位, 不好意思哈, 請允許我把完整的標(biāo)題寫完(標(biāo)題不能超過64個有效字符): 記一次解決樹莓派下載Django庫 ——報錯為TypeError: unsupported operand types f...

    TalkingData 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<