想像我們在餐廳點餐的場景,如果剛好客人很多廚房很忙,或是服務生人手不足,可能偶爾會發生一些小問題,像是餐點被忘記或是送上不對的餐點,或是甚至沒人來。
大家或多或少有過這樣的經驗吧?
如果發生這樣的情況,你會怎麼做?
再跟服務生講一次,或叫到他來為止,是吧?
在網路的世界,偶爾也會發生這樣的事情。當你去Call一個API,發出一個要求(Client Request),對方的伺服器(Server)不見得每次會正確的給你回應。
不管基於什麼理由,當Request失敗的時候,往往我們會想要再試一次(Retry),或是不斷嘗試直到成功為止 -- 就跟我們點餐一樣...當然你也可以不爽走人
現實中,我們會需要用到Retry的情況其實不少。想想看,假設你今天想要上網登記打疫苗,結果衛福部Server一直塞車的時候,我們是不是會一直去按更新?
這時候,如果有個自動重播(Retry)功能是不是就很方便(...當然如果大家都這麼做的話網路可能就爆掉了...)
講了那麼多,今天主要想來跟大家介紹一個好用的第三方Python Library - tenacity,來幫助我們解決這個問題!
模擬不安定的API
在講tenacity之前,我想先來做一個function模擬剛剛提到的點餐的情況。姑且就叫它order_meal_api。
當你call這個order_meal_api的時候,有可能你會成功拿到你要的餐點,但是也有可能失敗,譬如說送錯餐或是等很久.....