Network requests may fail for various reasons, such as network fluctuations, temporary unavailability of services, etc. To enhance client-side robustness, it is a common practice to implement automatic retries for requests. In Python, therequests
library is one of the standard tools for handling HTTP requests. However, therequests
itself does not provide a retry mechanism directly, which requires the help of theurllib3
libraryRetry
class to implement it.
In this article, we will describe how torequests
The automatic retry of requests is implemented in the
1. The need for retries
In distributed systems, communication between services may fail for various reasons. The automatic retry mechanism can improve the reliability and fault tolerance of the system. A reasonable retry strategy can reduce the failure of requests due to temporary failures.
2. Implementation of the basic principles of retrying
existrequests
The following steps are usually required to implement retries in
- Import the necessary modules.
- Create a
HTTPAdapter
Example. - exist
HTTPAdapter
upstream configurationRetry
Strategy. - Place the configured
HTTPAdapter
Mount toSession
Object on. - Send the request using a Session object with retries configured.
3. Use urllib3 to implement retries
Here's a specific example showing how to add a new function to therequests
Request to add retry logic.
3.1 Introducing modules
First, you need to import therequests
libraries andurllib3
(used form a nominal expression)Retry
Class.
import requests from import HTTPAdapter from import Retry
3.2. Configuring the retry policy
utilizationRetry
class to define the retry policy. Here you can specify the number of retries, the set of status codes, the type of exception, etc.
retries = Retry( total=5, # of total retries backoff_factor=1, # Exponential fallback factor status_forcelist=[500, 502, 503, 504], # Specify which status codes trigger retries allowed_methods=frozenset(['GET', 'POST']), # HTTP methods that allow retries )
3.3. Creating an HTTPAdapter and Configuring Retries
Create aHTTPAdapter
instance and set the retry policy.
adapter = HTTPAdapter(max_retries=retries)
3.4. Mounting an Adapter to a Session
establishSession
object for HTTP and HTTPS requests and mounts the above createdadapter
。
pythonCopy code session = () ('http://', adapter) ('https://', adapter)
3.5 Sending requests
Use the retry policy configured with thesession
object to send the request.
url = "/status/500" response = (url)
4. Example: requesting a service that may return an error
Below is a complete example, including error handling.
import requests from import HTTPAdapter from import Retry def request_with_retry(url, max_retries=5, backoff_factor=1, status_forcelist=None): if status_forcelist is None: status_forcelist = [500, 502, 503, 504] session = () retries = Retry(total=max_retries, backoff_factor=backoff_factor, status_forcelist=status_forcelist, method_whitelist=["GET", "POST"]) adapter = HTTPAdapter(max_retries=retries) ('http://', adapter) ('https://', adapter) try: response = (url) response.raise_for_status() # If the request returns a 4XX, 5XX response code, an HTTPError exception will be raised return response except as e: print(f"HTTP Error: {e}") except as e: print(f"Connection Error: {e}") except as e: print(f"Timeout Error: {e}") except as e: print(f"Request Exception: {e}") url = "/status/500" response = request_with_retry(url) if response: print()
In this example, if the service responds with a 500 series error, or a connection exception, therequest_with_retry
function will attempt the request up to five times.
reach a verdict
In Python, use therequests
library cooperationurllib3
(used form a nominal expression)Retry
class that allows flexible implementation of an automatic retry mechanism for HTTP requests. This can significantly improve an application's ability to handle network fluctuations. This pattern is especially important in scenarios such as microservices and API calls. It should be noted that the number of retries and the strategy should be carefully chosen to prevent excessive retries from overloading the service.
To this point this article on the Python Requests library retry strategy is introduced to this article, more related Python Requests retry strategy content please search my previous posts or continue to browse the following related articles I hope you will support me in the future more!