db.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import redis
  2. from proxypool.error import PoolEmptyError
  3. from proxypool.setting import HOST, PORT
  4. class RedisClient(object):
  5. def __init__(self, host=HOST, port=PORT):
  6. self._db = redis.Redis(host, port)
  7. def get(self, count=1):
  8. """
  9. get proxies from redis
  10. """
  11. proxies = self._db.lrange("proxies", 0, count - 1)
  12. self._db.ltrim("proxies", count, -1)
  13. print(proxies)
  14. return proxies
  15. def put(self, proxy):
  16. """
  17. add proxy to right top
  18. """
  19. self._db.rpush("proxies", proxy)
  20. def put_many(self, proxies):
  21. """
  22. put many proxies to right
  23. """
  24. for proxy in proxies:
  25. self.put(proxy)
  26. def pop(self):
  27. """
  28. get proxy from right.
  29. """
  30. try:
  31. return self._db.rpop("proxies").decode('utf-8')
  32. except:
  33. raise PoolEmptyError
  34. @property
  35. def queue_len(self):
  36. """
  37. get length from queue.
  38. """
  39. return self._db.llen("proxies")
  40. def flush(self):
  41. """
  42. flush db
  43. """
  44. self._db.flushall()
  45. if __name__ == '__main__':
  46. conn = RedisClient()
  47. print(conn.pop())