PageRenderTime 20ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/queues/backends/beanstalkd.py

http://queues.googlecode.com/
Python | 69 lines | 52 code | 12 blank | 5 comment | 11 complexity | b42db576eaf5d15a9b99503d31217870 MD5 | raw file
  1. """
  2. Backend for beanstalkd queue.
  3. This backend requires the beanstalkc library to be installed.
  4. """
  5. from queues.backends.base import BaseQueue
  6. from queues import InvalidBackend, QueueException
  7. import os
  8. try:
  9. import beanstalkc
  10. except ImportError:
  11. raise InvalidBackend("Unable to import the beanstalkc library.")
  12. try:
  13. from django.conf import settings
  14. CONN = getattr(settings, 'QUEUE_BEANSTALKD_CONNECTION', None)
  15. except:
  16. CONN = os.environ.get('QUEUE_BEANSTALKD_CONNECTION', None)
  17. if not CONN:
  18. raise InvalidBackend("QUEUE_BEANSTALKD_CONNECTION not set.")
  19. class Queue(BaseQueue):
  20. def __init__(self, name='default'):
  21. host, port = CONN.split(':')
  22. self._connection = beanstalkc.Connection(host=host, port=int(port))
  23. self.backend = 'beanstalkd'
  24. self.name = name
  25. self._connection.use(name)
  26. def read(self):
  27. try:
  28. job = self._connection.reserve()
  29. message = job.body
  30. job.delete()
  31. return message
  32. except (beanstalkc.DeadlineSoon, beanstalkc.CommandFailed, beanstalkc.UnexpectedResponse), e:
  33. raise QueueException, e
  34. def write(self, message):
  35. try:
  36. return self._connection.put(message)
  37. except (beanstalkc.CommandFailed, beanstalkc.UnexpectedResponse), e:
  38. raise QueueException, e
  39. def __len__(self):
  40. try:
  41. return int(self._connection.stats().get('current-jobs-ready', 0))
  42. except (beanstalkc.CommandFailed, beanstalkc.UnexpectedResponse), e:
  43. raise QueueException, e
  44. def __repr__(self):
  45. return "<Queue %s>" % self.name
  46. def create_queue():
  47. """This isn't required, so we noop. Kept here for swapability."""
  48. return True
  49. def delete_queue(name):
  50. """Beanstalkd backends don't provide a way to do this."""
  51. raise NotImplementedError
  52. def get_list():
  53. """Beanstalkd backends don't provide a way to do this."""
  54. raise NotImplementedError