run_huey.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import logging
  2. from django.conf import settings
  3. from django.core.management.base import BaseCommand
  4. from django.utils.module_loading import autodiscover_modules
  5. from huey.consumer import Consumer
  6. from huey.consumer_options import ConsumerConfig
  7. from huey.consumer_options import OptionParserHandler
  8. logger = logging.getLogger(__name__)
  9. class Command(BaseCommand):
  10. """
  11. Queue consumer. Example usage::
  12. To start the consumer (note you must export the settings module):
  13. django-admin.py run_huey
  14. """
  15. help = "Run the queue consumer"
  16. _type_map = {'int': int, 'float': float}
  17. def add_arguments(self, parser):
  18. option_handler = OptionParserHandler()
  19. groups = (
  20. option_handler.get_logging_options(),
  21. option_handler.get_worker_options(),
  22. option_handler.get_scheduler_options(),
  23. )
  24. for option_list in groups:
  25. for short, full, kwargs in option_list:
  26. if short == '-v':
  27. full = '--huey-verbose'
  28. short = '-V'
  29. if 'type' in kwargs:
  30. kwargs['type'] = self._type_map[kwargs['type']]
  31. kwargs.setdefault('default', None)
  32. parser.add_argument(full, short, **kwargs)
  33. def handle(self, *args, **options):
  34. from huey.contrib.djhuey import HUEY
  35. consumer_options = {}
  36. try:
  37. if isinstance(settings.HUEY, dict):
  38. consumer_options.update(settings.HUEY.get('consumer', {}))
  39. except AttributeError:
  40. pass
  41. for key, value in options.items():
  42. if value is not None:
  43. consumer_options[key] = value
  44. consumer_options.setdefault('verbose',
  45. consumer_options.pop('huey_verbose', None))
  46. autodiscover_modules("tasks")
  47. config = ConsumerConfig(**consumer_options)
  48. config.validate()
  49. config.setup_logger()
  50. consumer = Consumer(HUEY, **config.values)
  51. consumer.run()