redisQueue.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import redis
  2. import sys
  3. class RedisQueue(object):
  4. """Simple Queue with Redis Backend"""
  5. def __init__(self, name, namespace, host, port, db):
  6. self.__db= redis.Redis(host, port, db)
  7. self.key = '%s:%s' %(namespace, name)
  8. try:
  9. self.__db.client_list()
  10. except redis.ConnectionError:
  11. print "RedisQueue failed to connect to the server. "
  12. #print host, port, db, self.key
  13. def qsize(self):
  14. """Return the approximate size of the queue."""
  15. return self.__db.llen(self.key)
  16. def empty(self):
  17. """Return True if the queue is empty, False otherwise."""
  18. return self.qsize() == 0
  19. def put(self, item):
  20. """Put item into the queue."""
  21. self.__db.rpush(self.key, item)
  22. def peek(self, pos=0):
  23. return self.__db.lindex(self.key, pos)
  24. def get(self, block=True, timeout=None):
  25. """Remove and return an item from the queue.
  26. If optional args block is true and timeout is None (the default), block
  27. if necessary until an item is available."""
  28. if block:
  29. item = self.__db.blpop(self.key, timeout=timeout)
  30. else:
  31. item = self.__db.lpop(self.key)
  32. if item:
  33. item = item[1]
  34. return item
  35. def get_nowait(self):
  36. """Equivalent to get(False)."""
  37. return self.get(False)