import time
import requests
import threading
class RequestThrottler:
def __init__(self, url, delay=1):
self.url = url
self.delay = delay # Delay in seconds
self.lock = threading.Lock() # Thread safety
self.last_request_time = 0
def _throttle(self):
"""Internal function to handle throttling."""
with self.lock:
now = time.time()
time_since_last_request = now - self.last_request_time
if time_since_last_request < self.delay:
time.sleep(self.delay - time_since_last_request)
self.last_request_time = time.time()
def make_request(self, params=None):
"""Makes a request to the URL with parameter throttling."""
self._throttle() # Ensure throttling delay
try:
response = requests.get(self.url, params=params)
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
return response
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
return None
if __name__ == '__main__':
# Example usage
url = "https://httpbin.org/get" # Replace with your target URL
throtter = RequestThrottler(url, delay=0.5) # Throttle to 0.5 seconds
for i in range(10):
params = {'param1': i}
response = throtter.make_request(params)
if response:
print(f"Request {i} successful. Status code: {response.status_code}")
time.sleep(0.1) # Add a small delay between requests for demonstration
Add your comment