poolrequests.py 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import requests
  2. the_http_adapter = requests.adapters.HTTPAdapter(pool_connections=100)
  3. the_https_adapter = requests.adapters.HTTPAdapter(pool_connections=100)
  4. class SessionSinglePool(requests.Session):
  5. def __init__(self):
  6. global the_https_adapter, the_http_adapter
  7. super(SessionSinglePool, self).__init__()
  8. # reuse the same adapters
  9. self.adapters.clear()
  10. self.mount('https://', the_https_adapter)
  11. self.mount('http://', the_http_adapter)
  12. def close(self):
  13. """Call super, but clear adapters since there are managed globaly"""
  14. self.adapters.clear()
  15. super(SessionSinglePool, self).close()
  16. def request(method, url, **kwargs):
  17. """same as requests/requests/api.py request(...) except it use SessionSinglePool"""
  18. session = SessionSinglePool()
  19. response = session.request(method=method, url=url, **kwargs)
  20. session.close()
  21. return response
  22. def get(url, **kwargs):
  23. kwargs.setdefault('allow_redirects', True)
  24. return request('get', url, **kwargs)
  25. def options(url, **kwargs):
  26. kwargs.setdefault('allow_redirects', True)
  27. return request('options', url, **kwargs)
  28. def head(url, **kwargs):
  29. kwargs.setdefault('allow_redirects', False)
  30. return request('head', url, **kwargs)
  31. def post(url, data=None, **kwargs):
  32. return request('post', url, data=data, **kwargs)
  33. def put(url, data=None, **kwargs):
  34. return request('put', url, data=data, **kwargs)
  35. def patch(url, data=None, **kwargs):
  36. return request('patch', url, data=data, **kwargs)
  37. def delete(url, **kwargs):
  38. return request('delete', url, **kwargs)