Change8

v5.6.0

Breaking Changes
📦 celeryView on GitHub →
2 breaking3 features🐛 4 fixes🔧 5 symbols

Summary

Celery 5.6.0 drops Python 3.8 support, reverts SQS to pycurl, adds ETA task limits and queue‑type configuration, and includes several security and memory‑leak fixes.

⚠️ Breaking Changes

  • Dropped support for Python 3.8; minimum required Python version is now 3.9. Upgrade Python before upgrading Celery.
  • SQS transport reverted from urllib3 back to pycurl, which may break setups that relied on the urllib3 implementation. Adjust any custom SQS transport configuration accordingly.

Migration Steps

  1. If you upgraded to Celery 5.5.0 and switched SQS transport to `urllib3`, revert any custom settings to use `pycurl` or remove the `urllib3` specific options.
  2. Review logging configuration to ensure no broker credentials are exposed; no code changes required as the library now sanitizes them.
  3. Optionally configure `worker_eta_task_limit` and queue‑type settings to take advantage of new features.

✨ New Features

  • Added `worker_eta_task_limit` configuration to limit the number of ETA/countdown tasks a worker fetches, preventing out‑of‑memory crashes.
  • Added `task_create_missing_queue_type` and `task_create_missing_queue_exchange_type` configurations to control queue and exchange types for auto‑created queues.
  • Initial support for Python 3.14.

🐛 Bug Fixes

  • Fixed security issue where broker URLs with passwords were logged in plaintext; credentials are now sanitized in all log output.
  • Fixed memory leak in task exception handling on Python 3.11+ by breaking reference cycles in tracebacks.
  • Fixed memory leak where `AsyncResult` subscriptions were not cleaned up when results were forgotten.
  • Reverted SQS transport to use `pycurl` instead of `urllib3` to resolve critical issues for SQS users.

🔧 Affected Symbols

worker_eta_task_limittask_create_missing_queue_typetask_create_missing_queue_exchange_typeAsyncResultSQS transport (pycurl/urllib3 switch)