__init__.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import importlib
  2. from billiard.utils.functional import curry
  3. from carrot.utils import rpartition
  4. from celery import conf
  5. BACKEND_ALIASES = {
  6. "amqp": "celery.backends.amqp.AMQPBackend",
  7. "database": "celery.backends.database.DatabaseBackend",
  8. "db": "celery.backends.database.DatabaseBackend",
  9. "redis": "celery.backends.pyredis.RedisBackend",
  10. "cache": "celery.backends.cache.CacheBackend",
  11. "mongodb": "celery.backends.mongodb.MongoBackend",
  12. "tyrant": "celery.backends.tyrant.TyrantBackend",
  13. }
  14. _backend_cache = {}
  15. def resolve_backend(backend):
  16. backend = BACKEND_ALIASES.get(backend, backend)
  17. backend_module_name, _, backend_cls_name = rpartition(backend, ".")
  18. return backend_module_name, backend_cls_name
  19. def _get_backend_cls(backend):
  20. backend_module_name, backend_cls_name = resolve_backend(backend)
  21. backend_module = importlib.import_module(backend_module_name)
  22. return getattr(backend_module, backend_cls_name)
  23. def get_backend_cls(backend):
  24. """Get backend class by name/alias"""
  25. if backend not in _backend_cache:
  26. _backend_cache[backend] = _get_backend_cls(backend)
  27. return _backend_cache[backend]
  28. """
  29. .. function:: get_default_backend_cls()
  30. Get the backend class specified in :setting:`CELERY_BACKEND`.
  31. """
  32. get_default_backend_cls = curry(get_backend_cls, conf.CELERY_BACKEND)
  33. """
  34. .. class:: DefaultBackend
  35. The default backend class used for storing task results and status,
  36. specified in :setting:`CELERY_BACKEND`.
  37. """
  38. DefaultBackend = get_default_backend_cls()
  39. """
  40. .. data:: default_backend
  41. An instance of :class:`DefaultBackend`.
  42. """
  43. default_backend = DefaultBackend()