conf.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import logging
  2. import warnings
  3. from datetime import timedelta
  4. from celery.registry import tasks
  5. from celery.loaders import settings
  6. DEFAULT_LOG_FMT = '[%(asctime)s: %(levelname)s/%(processName)s] %(message)s'
  7. LOG_LEVELS = dict(logging._levelNames)
  8. LOG_LEVELS["FATAL"] = logging.FATAL
  9. LOG_LEVELS[logging.FATAL] = "FATAL"
  10. _DEFAULTS = {
  11. "CELERY_DEFAULT_ROUTING_KEY": "celery",
  12. "CELERY_DEFAULT_QUEUE": "celery",
  13. "CELERY_DEFAULT_EXCHANGE": "celery",
  14. "CELERY_DEFAULT_EXCHANGE_TYPE": "direct",
  15. "CELERYD_CONCURRENCY": 0, # defaults to cpu count
  16. "CELERYD_PID_FILE": "celeryd.pid",
  17. "CELERYD_DAEMON_LOG_FORMAT": DEFAULT_LOG_FMT,
  18. "CELERYD_DAEMON_LOG_LEVEL": "WARN",
  19. "CELERYD_LOG_FILE": "celeryd.log",
  20. "CELERY_ALWAYS_EAGER": False,
  21. "CELERY_TASK_RESULT_EXPIRES": timedelta(days=5),
  22. "CELERY_AMQP_CONNECTION_TIMEOUT": 4,
  23. "CELERY_AMQP_CONNECTION_RETRY": True,
  24. "CELERY_AMQP_CONNECTION_MAX_RETRIES": 100,
  25. "CELERY_TASK_SERIALIZER": "pickle",
  26. "CELERY_BACKEND": "database",
  27. "CELERY_DISABLE_RATE_LIMITS": False,
  28. "CELERYBEAT_PID_FILE": "celerybeat.pid",
  29. "CELERYBEAT_LOG_LEVEL": "INFO",
  30. "CELERYBEAT_LOG_FILE": "celerybeat.log",
  31. "CELERYBEAT_SCHEDULE_FILENAME": "celerybeat-schedule",
  32. "CELERYBEAT_MAX_LOOP_INTERVAL": 5 * 60, # five minutes.
  33. "CELERYMON_PID_FILE": "celerymon.pid",
  34. "CELERYMON_LOG_LEVEL": "INFO",
  35. "CELERYMON_LOG_FILE": "celerymon.log",
  36. "CELERY_SEND_EVENTS": False,
  37. "CELERY_STORE_ERRORS_EVEN_IF_IGNORED": False,
  38. }
  39. def _get(name, default=None):
  40. if default is None:
  41. default = _DEFAULTS.get(name)
  42. return getattr(settings, name, default)
  43. # <--- Task options <- -- --- - ----- -- #
  44. ALWAYS_EAGER = _get("CELERY_ALWAYS_EAGER")
  45. CELERY_BACKEND = _get("CELERY_BACKEND")
  46. CELERY_CACHE_BACKEND = _get("CELERY_CACHE_BACKEND")
  47. TASK_SERIALIZER = _get("CELERY_TASK_SERIALIZER")
  48. TASK_RESULT_EXPIRES = _get("CELERY_TASK_RESULT_EXPIRES")
  49. # Make sure TASK_RESULT_EXPIRES is a timedelta.
  50. if isinstance(TASK_RESULT_EXPIRES, int):
  51. TASK_RESULT_EXPIRES = timedelta(seconds=TASK_RESULT_EXPIRES)
  52. # <--- Worker <- -- --- - ----- -- #
  53. SEND_EVENTS = _get("CELERY_SEND_EVENTS")
  54. DEFAULT_RATE_LIMIT = _get("CELERY_DEFAULT_RATE_LIMIT")
  55. DISABLE_RATE_LIMITS = _get("CELERY_DISABLE_RATE_LIMITS")
  56. STORE_ERRORS_EVEN_IF_IGNORED = _get("CELERY_STORE_ERRORS_EVEN_IF_IGNORED")
  57. SEND_CELERY_TASK_ERROR_EMAILS = _get("SEND_CELERY_TASK_ERROR_EMAILS",
  58. not settings.DEBUG)
  59. LOG_FORMAT = _get("CELERYD_DAEMON_LOG_FORMAT")
  60. DAEMON_LOG_FILE = _get("CELERYD_LOG_FILE")
  61. DAEMON_LOG_LEVEL = _get("CELERYD_DAEMON_LOG_LEVEL")
  62. DAEMON_LOG_LEVEL = LOG_LEVELS[DAEMON_LOG_LEVEL.upper()]
  63. DAEMON_PID_FILE = _get("CELERYD_PID_FILE")
  64. DAEMON_CONCURRENCY = _get("CELERYD_CONCURRENCY")
  65. # <--- Message routing <- -- --- - ----- -- #
  66. QUEUES = _get("CELERY_QUEUES")
  67. DEFAULT_QUEUE = _get("CELERY_DEFAULT_QUEUE")
  68. DEFAULT_ROUTING_KEY = _get("CELERY_DEFAULT_ROUTING_KEY")
  69. DEFAULT_EXCHANGE = _get("CELERY_DEFAULT_EXCHANGE")
  70. DEFAULT_EXCHANGE_TYPE = _get("CELERY_DEFAULT_EXCHANGE_TYPE")
  71. _DEPRECATIONS = {"CELERY_AMQP_CONSUMER_QUEUES": "CELERY_QUEUES",
  72. "CELERY_AMQP_CONSUMER_QUEUE": "CELERY_QUEUES",
  73. "CELERY_AMQP_EXCHANGE": "CELERY_DEFAULT_EXCHANGE",
  74. "CELERY_AMQP_EXCHANGE_TYPE": "CELERY_DEFAULT_EXCHANGE_TYPE",
  75. "CELERY_AMQP_CONSUMER_ROUTING_KEY": "CELERY_QUEUES",
  76. "CELERY_AMQP_PUBLISHER_ROUTING_KEY":
  77. "CELERY_DEFAULT_ROUTING_KEY"}
  78. _DEPRECATED_QUEUE_SETTING_FMT = """
  79. %s is deprecated in favor of %s and scheduled for removal in celery v1.0.
  80. Please visit http://bit.ly/5DsSuX for more information.
  81. We're sorry for the inconvenience.
  82. """.strip()
  83. def _find_deprecated_queue_settings():
  84. global DEFAULT_QUEUE, DEFAULT_ROUTING_KEY
  85. global DEFAULT_EXCHANGE, DEFAULT_EXCHANGE_TYPE
  86. binding_key = None
  87. multi = _get("CELERY_AMQP_CONSUMER_QUEUES")
  88. if multi:
  89. return multi
  90. single = _get("CELERY_AMQP_CONSUMER_QUEUE")
  91. if single:
  92. DEFAULT_QUEUE = single
  93. DEFAULT_EXCHANGE = _get("CELERY_AMQP_EXCHANGE", DEFAULT_EXCHANGE)
  94. DEFAULT_EXCHANGE_TYPE = _get("CELERY_AMQP_EXCHANGE_TYPE",
  95. DEFAULT_EXCHANGE_TYPE)
  96. binding_key = _get("CELERY_AMQP_CONSUMER_ROUTING_KEY",
  97. DEFAULT_ROUTING_KEY)
  98. DEFAULT_ROUTING_KEY = _get("CELERY_AMQP_PUBLISHER_ROUTING_KEY",
  99. DEFAULT_ROUTING_KEY)
  100. binding_key = binding_key or DEFAULT_ROUTING_KEY
  101. return {DEFAULT_QUEUE: {"exchange": DEFAULT_EXCHANGE,
  102. "exchange_type": DEFAULT_EXCHANGE_TYPE,
  103. "binding_key": binding_key}}
  104. def _warn_if_deprecated_queue_settings():
  105. for setting, new_setting in _DEPRECATIONS.items():
  106. if _get(setting):
  107. warnings.warn(DeprecationWarning(_DEPRECATED_QUEUE_SETTING_FMT % (
  108. setting, _DEPRECATIONS[setting])))
  109. break
  110. _warn_if_deprecated_queue_settings()
  111. if not QUEUES:
  112. QUEUES = _find_deprecated_queue_settings()
  113. # :--- Broker connections <- -- --- - ----- -- #
  114. AMQP_CONNECTION_TIMEOUT = _get("CELERY_AMQP_CONNECTION_TIMEOUT")
  115. AMQP_CONNECTION_RETRY = _get("CELERY_AMQP_CONNECTION_RETRY")
  116. AMQP_CONNECTION_MAX_RETRIES = _get("CELERY_AMQP_CONNECTION_MAX_RETRIES")
  117. # :--- Celery Beat <- -- --- - ----- -- #
  118. CELERYBEAT_PID_FILE = _get("CELERYBEAT_PID_FILE")
  119. CELERYBEAT_LOG_LEVEL = _get("CELERYBEAT_LOG_LEVEL")
  120. CELERYBEAT_LOG_FILE = _get("CELERYBEAT_LOG_FILE")
  121. CELERYBEAT_SCHEDULE_FILENAME = _get("CELERYBEAT_SCHEDULE_FILENAME")
  122. CELERYBEAT_MAX_LOOP_INTERVAL = _get("CELERYBEAT_MAX_LOOP_INTERVAL")
  123. # :--- Celery Monitor <- -- --- - ----- -- #
  124. CELERYMON_PID_FILE = _get("CELERYMON_PID_FILE")
  125. CELERYMON_LOG_LEVEL = _get("CELERYMON_LOG_LEVEL")
  126. CELERYMON_LOG_FILE = _get("CELERYMON_LOG_FILE")