專案msb服務不穩定,通過python建立websocket總是會有問題,很不穩定,但是一般來說重新建立連線就能成功,多嘗試幾次就好了。
既然有了相應的需求,就要考慮如何去解決這個websocket建立異常重試的問題
原來的**只建立了一次websocket連線:
ws.connect(url, header=header)
方法一:
使用迴圈重試的方式:
import time
for i in
range(4
):try:
ws.connect(url, header=header)
break
except exception as e:
atlog.info(
"let's retry"
) time.sleep(
2)
該方式需要先導入time模組,此處是考慮到重試中間加點間隔時間會好點,密集重試效果不好。
重試後建立鏈結成功就退出迴圈。
from retrying import retry
@classmethod
#stop_max_attempt_number最大重試次數, 兩次, stop_max_delay是兩次重試間隔多少毫秒,這裡我寫的間隔1秒
@retry(stop_max_attempt_number=
3,stop_max_delay=
1000
)def
do_connect
(cls, ws, url, header)
: atlog.info(
"let's retry.."
) ws.connect(url, hearder=header)
retrying是乙個python的重試包,可以用來自動重試一些可能執行失敗的程式段。retryiing提供乙個裝飾器函式retry,被裝飾的函式就會在執行失敗的條件下重新執行,預設只要一直報錯就會不斷重試。
retry還可以接受一些引數,這個從原始碼中retrying類的初始化函式可以看到可選的引數:
另外,我們可以指定要在出現哪些異常的時候再去retry,這個要用retry_on_exception傳入乙個函式物件:
def
retry_if_io_error
(exception)
:return
isinstance
(exception, ioerror)
@retry(retry_on_exception=retry_if_io_error)
defread_a_file()
:with
open
("file"
,"r"
)as f:
return f.read(
)
還可以指定要在得到哪些結果的時候去retry,這個要用retry_on_result傳入乙個函式物件:
def
retry_if_result_none
(result)
:return result is
none
@retry(retry_on_result=retry_if_result_none)
defget_result()
:return
none
Python中異常重試的解決方案詳解
1 2345 67defretry if io error exception returnisinstance exception,ioerror retry retry on exception retry if io error defread a file withopen file r a...
Python中異常重試的解決方案詳解
前言 大家在做資料抓取的時候,經常遇到由於網路問題導致的程式儲存,先前只是記錄了錯誤內容,並對錯誤內容進行後期處理。原先的流程 def crawl page url pass def log error url pass url try crawl page url except log error...
非同步異常重試函式 tryCall
在spa程式中我們遇到的網路環境和傳統網頁程式不同,因此思維也不能和傳統頁面雷同,面對不穩定的網路環境,為了不使一點網路不穩定就造成程式錯誤,需要引入容錯能力,或者說鈍化網路請求對於網路環境的敏感性,trycall就是這樣乙個函式,在出現異常的情況下可以進行重試,重試的時間間隔和總次數可以自定義 當...