db.py 1.2 KB

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