How to implement retry mechanism into python requests library?

前端 未结 6 2017
春和景丽
春和景丽 2020-12-02 10:12

I would like to add a retry mechanism to python request library, so scripts that are using it will retry for non fatal errors.

At this moment I do consider three kin

6条回答
  •  庸人自扰
    2020-12-02 10:37

    from requests.adapters import HTTPAdapter
    from urllib3.util.retry import Retry
    
    
    MAX_RETRY = 2
    MAX_RETRY_FOR_SESSION = 2
    BACK_OFF_FACTOR = 0.3
    TIME_BETWEEN_RETRIES = 1000
    ERROR_CODES = (500, 502, 504)
    
    
    def requests_retry_session(retries=MAX_RETRY_FOR_SESSION,
        back_off_factor=BACK_OFF_FACTOR,
        status_force_list=ERROR_CODES, 
        session=None):
           session = session  
           retry = Retry(total=retries, read=retries, connect=retries,
                         backoff_factor=back_off_factor,
                         status_forcelist=status_force_list,
                         method_whitelist=frozenset(['GET', 'POST']))
           adapter = HTTPAdapter(max_retries=retry)
           session.mount('http://', adapter)
           session.mount('https://', adapter)
           return session
    
    
    
    class ConfigService:
    
       def __init__(self):
          self.session = requests_retry_session(session=requests.Session())
    
       def call_to_api():
          config_url = 'http://localhost:8080/predict/'
          headers = {
            "Content-Type": "application/json",
            "x-api-key": self.x_api_key
          } 
          response = self.session.get(config_url, headers=headers)
          return response
    

提交回复
热议问题