pypi celery 5.7.0
v5.7.0

7 hours ago

Celery 5.7.0

We're pleased to announce Celery 5.7.0, a new stable release of Celery.

This release brings substantial improvements to task workflows, worker reliability, result handling, scheduling, and broker connectivity. It also includes new integrations, improved Python compatibility, performance optimizations, and a large number of bug fixes contributed by the community.

A significant part of this release focuses on making complex Canvas workflows more reliable and efficient, improving worker behavior during broker disconnections and shutdown, and making result-backend state handling more consistent.

Highlights

  • More reliable Canvas workflows: Improved chains, groups, chords, nested workflows, callbacks, errbacks, and failure propagation. Several fixes also reduce unnecessary message growth in complex chains and chords.
  • Improved worker reliability: Better connection recovery, graceful shutdown, prefork process management, autoscaling, and handling of worker-process loss.
  • More predictable task results: Improved result-state consistency, retry handling, ignore_result behavior, and concurrent AsyncResult tracking.
  • Timezone and scheduling improvements: More reliable ETA, countdown, expiration, crontab, solar schedules, and Celery Beat behavior across daylight-saving-time transitions.
  • New Pydantic integration behavior: Tasks configured with pydantic=True can accept Pydantic model instances.
  • New pymemcache result backend support: Adds support for using pymemcache as a result backend.
  • Improved Redis result backend: New expiration settings for chord and failure results, improved Pub/Sub handling, and more reliable chord accounting.
  • Better Python compatibility: Python 3.10 is now the minimum supported version, with compatibility work for newer Python versions, including Python 3.14.
  • Improved worker operations: Cgroup-aware automatic concurrency detection and additional worker-management improvements.

What's New

Canvas, Chains, Groups, and Chords

Celery 5.7 includes extensive improvements to Canvas execution and composition, particularly for nested workflows and complex chains and chords.

  • Fixed failure propagation through chained tasks into chord bodies.
  • Improved chord failure handling when a chord header or a chained chord fails.
  • Fixed chord error handling when the chord body is itself a chain.
  • Improved handling of empty groups and chains, including empty groups inside chains and group headers.
  • Chains are now constructed in a single pass instead of repeatedly folding signatures with the | operator.
  • Reduced unnecessary message growth in chains of chords, chains of groups, implicit chords, and standalone chord bodies.
  • Improved nested group handling and preservation of group IDs.
  • Fixed duplicate nodes in GroupResult.as_tuple() after groups in chains.
  • Improved GroupResult fan-out behavior in chains.
  • Fixed eager execution behavior for chains containing Ignore or Reject.
  • Avoided unnecessary result-backend access when eagerly applying groups inside chains.
  • Improved task replacement with chains containing groups, including cases that previously could hang.
  • Improved callback execution when a task is replaced by a chain, ensuring callbacks are not invoked repeatedly.
  • Fixed eager-chain callback behavior so that chain links are dispatched once at the appropriate point.
  • Improved propagation of task options, ETA, and countdown values to chord headers.
  • Corrected the handling of link and link_error options on chords so they are applied to the chord body.
  • Improved errback argument classification and handling of new-style errback calls.
  • Preserved group errback mutability and improved stamped-header merging and revocation.
  • Improved signature cloning and option isolation, preventing cloned signatures from sharing mutable keyword arguments with their originals.
  • Fixed argument forwarding through nested chains during eager execution.
  • Improved map and starmap option merging.

These changes make complex Canvas compositions more predictable and reduce unnecessary broker traffic and message growth.

Worker Reliability and Process Management

This release includes a broad set of improvements to worker lifecycle management, process pools, connection recovery, and shutdown behavior.

  • Added support for the spawn start method with the asynchronous prefork pool.
  • Improved detection and initialization of spawned pool children.
  • Added cgroup-aware automatic worker concurrency detection through --concurrency=auto.
  • Added task_retry_on_worker_lost to control task requeues after a worker process is lost.
  • Improved prefork shutdown handling, including draining child results and acknowledging tasks during shutdown.
  • Fixed warm-shutdown issues with Eventlet and thread-based worker pools.
  • Improved cancellation and handling of prefetched tasks during worker shutdown.
  • Fixed worker stalls following broker reconnection.
  • Improved worker connection recovery and graceful shutdown behavior.
  • Fixed issues involving in-flight task reservations and prefetch handling during consumer connection loss.
  • Improved handling of per-consumer QoS and prefetch reduction.
  • Fixed autoscaling and disable-prefetch behavior for green worker pools.
  • Improved autoscale keepalive handling when immediate tasks are received.
  • Improved handling of worker process exit and pool cleanup.
  • Fixed request time-limit handling and ensured task failures are reported when hard time limits are reached.
  • Improved worker shutdown state handling when shutdown logging or signal dispatch raises an exception.
  • Fixed worker initialization and Django integration behavior.
  • Improved worker timer cleanup and broker-reconnection timer handling.
  • Added the worker hostname as the sender for the worker_process_init signal.

These changes improve worker resilience in environments with frequent broker reconnections, process failures, and graceful shutdown requirements.

Task Execution, Publishing, and Acknowledgements

Task publishing and execution behavior received several important correctness improvements.

  • Decoupled acks_on_failure and acks_on_timeout, allowing these acknowledgment behaviors to be configured independently.
  • Improved handling of task acknowledgment and deferred acknowledgment in the worker consumer loop.
  • Improved task execution after ETA conversion failures.
  • Fixed ETA and expiration handling for protocol version 1 messages.
  • Improved handling of task retries and retry argument conflicts.
  • Fixed shared retry_kwargs mutation in automatic retry handling.
  • Improved broker retry behavior when publishing callbacks is refused by the broker.
  • Applied the merged retry policy consistently to task-publishing signals and task-sent events.
  • Fixed task publishing signal dispatch when signal receivers are registered dynamically.
  • Improved handling of per-task serializers and execution options in send_task().
  • Corrected the handling of ignore_result defaults in send_task() and Task.apply().
  • Preserved ignore_result overrides across task retries.
  • Fixed cases where ignored results could incorrectly record RETRY after worker loss.
  • Improved task failure reporting when a worker is lost by preserving request context in task_failure.
  • Improved task state handling when a task has already stored a successful result before a worker is lost.
  • Prevented a task from being marked REVOKED while another worker is still executing it.
  • Improved handling of rejected tasks that are not requeued.
  • Improved task execution and callback behavior when a task is redelivered and result deduplication is enabled.
  • Added runtime information to the task success signal.
  • Improved task request and callback handling around worker loss and memory errors.
  • Improved handling of task names and duplicate task registrations, including a warning when different callables use the same task name.

Result Backends and Result Handling

Result handling has received significant reliability and consistency improvements across several backends.

Redis result backend

  • Added result_chord_expires to control the expiration of chord-related Redis keys.
  • Added result_failure_expires to configure expiration for failure results.
  • Fixed Redis chord accounting so that each chord-header task is counted only once.
  • Improved Redis chord claim cleanup and ownership handling.
  • Improved Redis Pub/Sub synchronization between result draining and result cleanup.
  • Fixed Redis result compression when decode_responses is enabled.
  • Added support for configuring additional Redis connection errors.
  • Improved Redis SSL configuration when using Redis URLs.
  • Improved Redis reconnect and Pub/Sub compatibility across redis-py versions.
  • Added redis-py DriverInfo support.
  • Removed deprecated arguments from Redis connection calls.

Database and other result backends

  • Added support for pymemcache as a result backend.
  • Improved database-backend retry handling across database operations.
  • Added support for database backend retry configuration parameters.
  • Fixed database result serialization to honor result_serializer.
  • Added the missing date_done index to the database backend.
  • Improved database backend handling of SQL engine arguments and connection pooling.
  • Added an engine_callback to the database backend SessionManager.
  • Improved storage of task children and stamping metadata in database-backed extended results.
  • Improved database result cleanup and timezone handling.
  • Added support for preserving the first SUCCESS result in the database, MongoDB, and Cassandra backends.
  • Improved MongoDB result handling when results are stored without a request.
  • Fixed MongoDB result cleanup across daylight-saving-time transitions.
  • Improved Cosmos DB result upsert behavior so subsequent task states can be stored.
  • Improved Couchbase behavior when a result document is missing.
  • Improved idempotency of forget() across supported backends.
  • Improved ArangoDB handling when deleting missing documents.
  • Improved Azure Block Blob backend credential handling and pickling.
  • Improved RPC backend reconnection and result handling.
  • Fixed RPC backend behavior to respect result_extended.
  • Improved result compression and backend cleanup behavior.

AsyncResult and ResultSet

  • Added AsyncResult.exists() to check whether a result exists.
  • Improved backend tracking of multiple AsyncResult instances waiting for the same task ID.
  • Improved ResultSet.add() so results can be added after the set has already become ready.
  • Fixed timeout handling so a timeout of 0 is respected rather than treated as an indefinite wait.
  • Applied the zero-timeout behavior consistently to wait_for, ResultSet.join(), get_many(), and result draining.
  • Improved native result iteration and barrier finalization.
  • Preserved propagation behavior when joining nested native results.
  • Improved eager-result naming behavior when results are copied or pickled.
  • Improved result-state consistency and handling of revoked tasks.

Celery Beat, Scheduling, and Timezones

Celery 5.7 includes extensive fixes to scheduling and timezone handling, especially around daylight-saving-time transitions.

  • Improved ETA, countdown, and expiration calculations across daylight-saving-time transitions.
  • Fixed worker expiration checks during daylight-saving-time fall-back.
  • Improved crontab.remaining_delta() handling for timezone-aware datetimes.
  • Fixed crontab scheduling when later minute slots occur on an earlier day.
  • Improved handling of daylight-saving-time gaps in make_aware().
  • Improved relative schedule rounding across daylight-saving-time transitions.
  • Fixed solar schedule timing across daylight-saving-time changes.
  • Improved handling of non-uniform crontab schedules and beat_cron_starting_deadline.
  • Celery Beat now continues running when an individual schedule entry raises an exception.
  • Improved validation of impossible crontab dates.
  • Fixed Beat heap reordering and sleep behavior when schedule entries change their due time or request a retry.
  • Improved Beat schedule state restoration across persistence cycles.
  • Fixed Beat service serialization and scheduler connection cleanup during shutdown.
  • Added opt-in remote-control inspect ping support to Celery Beat.
  • Added the celery_beat_task header to task options.

These changes improve scheduling correctness and make Beat more resilient when individual scheduled tasks or schedule entries fail.

Queue Management, Routing, and Broker Connectivity

Several improvements were made to queue selection, routing, and broker reconnection behavior.

  • Improved queue alias handling in queue selection and deselection.
  • Fixed queue aliases so the actual queue name is stored when selecting a queue.
  • Improved default queue resolution for explicitly routed tasks.
  • Improved queue configuration so newly added queues receive the default routing key and maximum priority where appropriate.
  • Fixed routing-only queues leaking into worker consumers.
  • Improved restoration of known queues when add_consumer is used.
  • Improved AMQP task-route refresh behavior across configuration update operations.
  • Improved handling of native delayed-delivery bindings, including cycle detection and broadcast queues.
  • Improved RabbitMQ 4.3 compatibility in the RPC result backend and queue handling.
  • Improved worker behavior when unexpected queues are encountered after connection loss.
  • Improved connection recovery and pending-operation ordering.
  • Improved broker connection pool handling by adding a timeout to broker pool acquisition, preventing indefinite blocking.
  • Improved broker retry behavior when purging queues at startup.
  • Improved worker event publishing and buffering during broker reconnections.

Pydantic Integration

Tasks configured with pydantic=True can now accept Pydantic model instances when called.

This improves the integration between Celery tasks and applications that use Pydantic models for data validation and structured task arguments.

Configuration and Application Behavior

  • Improved ConfigurationView behavior so membership checks, key lookups, and iteration respect configuration mapping order.
  • Improved ConfigurationView.swap_with() handling.
  • Improved configuration copying while preserving configured values.
  • Fixed lazy configuration loading to honor config_from_object(silent=True).
  • Improved handling of configuration defaults so preconfigured values are not incorrectly included in defaults.
  • Improved configuration error messages by showing both original and prefixed keys.
  • Fixed add_defaults() behavior when configuration loading fails on an already configured application.
  • Improved backend resolution so backends.by_url() accepts backend classes.
  • Fixed Django task-class selection for Celery subclasses without a custom task class.
  • Limited Django fixup signal handlers to the relevant application.
  • Added a clear error when @shared_task is applied more than once.
  • Added __class_getitem__ support to generic classes.
  • Improved signal receiver identity handling for receivers bound to different instances.

Logging, Diagnostics, and Security

  • Added task_repr_maxlevels to control the depth of task argument and keyword-argument representations.
  • Added datefmt support to ColorFormatter and TaskFormatter.
  • Improved credential masking in worker inspection output, including broker read and write URLs.
  • Improved Azure credential redaction, including SAS tokens and account keys.
  • Improved URL sanitization for multi-server URLs.
  • Improved traceback handling and logging during worker timeouts and connection retries.
  • Fixed saferepr truncation to preserve balanced closing brackets.
  • Improved warning stack levels for more accurate warning locations.
  • Improved diagnostic handling of invalid worker environment values.
  • Improved certificate-expiration handling during verification.

Command-Line Interface and Utilities

  • Improved celery multi node-index handling, including index lists for named nodes.
  • Fixed celery multi failures with node names containing dashes.
  • Improved --workdir handling by expanding ~ for spawned workers.
  • Fixed escaped percent-sign handling in node formatting.
  • Improved CLI status errors with clearer messages.
  • Improved preload-option handling for commands that do not directly accept preload options.
  • Replaced deprecated codecs.open() usage in the settings upgrade command.
  • Improved regen iteration behavior, including generator slicing and source replacement.
  • Fixed BufferMap handling of bufmaxsize and its total count.
  • Improved LimitedSet timestamp and sequence-number handling when items are re-added or copied.
  • Fixed firstmethod() so it does not swallow AttributeError.
  • Improved file-descriptor iteration and cleanup behavior.
  • Cached extension entry-point discovery to reduce apply_async() CPU overhead.
  • Bounded State._tasks_to_resolve to prevent unbounded memory growth.

Compatibility and Dependencies

Python versions

Python 3.10 is now the minimum supported Python version.

Python 3.9 support has been removed from the package and its associated development and CI configurations.

This release also includes compatibility improvements for newer Python versions, including fixes for Python 3.14 annotation evaluation and function introspection behavior.

Core dependencies

  • Updated the Billiard requirement to >=4.3.1.
  • Updated the Kombu dependency to 5.7.0.
  • Updated click-repl to 0.4.0.
  • Removed explicit Redis version constraints from the requirements.
  • Replaced brotlipy with brotlicffi in the Brotli extra, with support for both CPython and PyPy.

Optional integrations and development dependencies have also received compatibility updates.

Upgrade Notes

Before upgrading, review the following points:

  • Python 3.10 or newer is required. Applications still running on Python 3.9 must upgrade their Python runtime before installing Celery 5.7.
  • Billiard and Kombu requirements have changed. Celery 5.7 requires Billiard >=4.3.1 and uses Kombu 5.7.0.
  • Review acknowledgment configuration. acks_on_failure and acks_on_timeout are now decoupled, so applications that rely on their previous combined behavior should review their task acknowledgment settings.
  • Review result expiration settings. Redis users can configure result_chord_expires and result_failure_expires independently.
  • Review custom task and backend integrations. Improvements to backend hook calling conventions and result-state handling may be relevant to custom result backends and task subclasses.
  • Review optional dependency extras. The Brotli extra now uses brotlicffi instead of brotlipy.

Consult the [Celery documentation](https://docs.celeryq.dev/en/stable/) for configuration details and upgrade guidance.

Contributors

Thank you to everyone who contributed code, tests, documentation, reviews, and feedback to this release.

This release includes contributions from many first-time contributors as well as long-standing Celery maintainers and community members. We appreciate every contribution that helped make Celery 5.7 more reliable and maintainable.

See the automatically generated contributor list and individual pull requests in the full changelog.

Full Changelog

For the complete list of changes between Celery 5.6.3 and 5.7.0, including individual pull requests and contributors, see:

[Compare v5.6.3...v5.7.0](v5.6.3...v5.7.0)

What's Changed

  • Fix Django worker recursion bug + defensive checks for pool_cls.module by @maycuatroi1 in #10048
  • Update elasticsearch requirement from <=9.1.2 to <=9.2.1 by @dependabot[bot] in #10053
  • Revert "Update elasticsearch requirement from <=9.1.2 to <=9.2.1" by @auvipy in #10054
  • Docs: Update user_preload_options example to use click. by @jorsyk in #10056
  • Fix invalid configuration key "bootstrap_servers" in Kafka demo by @jorsyk in #10060
  • Fix broken images on PyPI page by @Timour-Ilyas in #10066
  • Remove broken reference. in #10071
  • Removed --dist=loadscope from smoke tests by @Nusnus in #10073
  • Docs: Clarify task_retry signal args may be None by @GangEunzzang in #10076
  • Update example for Django by @sbc-khacnha in #10081
  • Update CI matrix to exclude Python 3.9 by @auvipy in #9980
  • Update default Python versions in Integration test by @auvipy in #10088
  • Update default Python versions in smoke-tests.yml by @auvipy in #10089
  • Remove Python 3.9 from tox configuration by @auvipy in #10087
  • Update Python and OS versions in Read the Docs config by @auvipy in #10090
  • Make tests compatible with pymongo >= 4.16 by @cjwatson in #10074
  • Remove Python 3.9 from Dockerfile by @auvipy in #10092
  • Revise Python compatibility for Celery versions by @auvipy in #10093
  • Update Python version requirement to 3.10 by @auvipy in #10091
  • fix: source install of cassandra-driver by @Izzette in #10105
  • fix: register task cross-reference role in Sphinx extension by @veeceey in #10100
  • fix: avoid cycle detection in native delayed delivery by @Izzette in #10095
  • fix(asynpool): avoid AttributeError when proc lacks _sentinel_poll by @mriddle in #10086
  • Update elastic-transport requirement from <=9.1.0 to <=9.2.1 by @dependabot[bot] in #10052
  • fix dusk_astronomical horizon sign (+18 -> -18) by @Mr-Neutr0n in #10121
  • Bump pytest from 8.4.2 to 9.0.2 by @dependabot[bot] in #10055
  • Fix#10106 onupdate col use lambda func by @ChickenBenny in #10108
  • Fix warm shutdown RuntimeError with eventlet>=0.37.0 (#10083) by @ChickenBenny in #10123
  • Fix 10109 db backend connection health by @ChickenBenny in #10124
  • Bump grpcio from 1.75.1 to 1.76.0 by @dependabot[bot] in #9962
  • Bump cryptography from 46.0.3 to 46.0.5 by @dependabot[bot] in #10132
  • Database Backend filter unsupport sql engine arguments with nullpool #7355 by @ChickenBenny in #10134
  • fix(beat): correct argument order in Service.reduce by @bysiber in #10137
  • ci: declare explicit read-only token permissions in workflow jobs by @Rohan5commit in #10139
  • chore: 'boto3to' to 'boto3 to' by @cuiweixie in #10133
  • Database Backend: Add missing index on date_done (Fixes #10097) by @ChickenBenny in #10098
  • docs: fix typo in CONTRIBUTING.rst by @Rohan5commit in #10141
  • Refer to Flower / Prometheus for monitoring by @WilliamDEdwards in #10140
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10143
  • docs: remove duplicated words in broker and routing docs by @Rohan5commit in #10146
  • docs: fix stale version reference and grammar in README by @kelsonbrito50 in #10145
  • docs: fix wording in Celery 5.3 worker pool notes by @Rohan5commit in #10149
  • docs: fix duplicated wording in 3.1 changelog entry by @Rohan5commit in #10152
  • feat(task): decouple acks_on_failure and acks_on_timeout by @abdullahmujahidali in #10150
  • docs: fix changelog typo in context manager wording by @Rohan5commit in #10144
  • Fix/10096 worker fails to reconnect after redis failover by @ChickenBenny in #10151
  • Add __class_getitem__ to generic classes by @brianhelba in #10038
  • Improve on_after_finalize signal documentation by @Br1an67 in #10155
  • Database Backend Should Support the retry config parameters #6540 by @ChickenBenny in #10130
  • Add non-commutative example to clarify partial arg ordering in canvas docs by @Br1an67 in #10157
  • Bump google-cloud-firestore from 2.22.0 to 2.23.0 by @dependabot[bot] in #10126
  • Remove redundant test_isa_mapping test (fixes #10077) by @daniel7an in #10103
  • Upgrade pytest-celery to >=1.3.0 and adopt PYTEST_CELERY_PKG build arg by @Nusnus in #10162
  • Chore(deps): Update elasticsearch requirement from <=9.1.2 to <=9.3.0 by @dependabot[bot] in #10164
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10161
  • Bump isort from 6.1.0 to 7.0.0 by @dependabot[bot] in #10051
  • Bump sphinx-click from 6.0.0 to 6.1.0 by @dependabot[bot] in #10050
  • Add redis-py DriverInfo support to Redis backend by @vchomakov in #10040
  • Remove deprecated args from redis get_connection call by @JaeHyuckSa in #10036
  • Fix #6912 rpc backend reconnection error by @ChickenBenny in #10179
  • Fix NameError with TYPE_CHECKING annotations on Python 3.14+ (PEP 649) by @drichardson in #10165
  • docs: Add elaboration on prefetch multiplier settings (worker_prefetch_multiplier) and worker_eta_task_limit by @tsangwailam in #10181
  • Fix O(K²) message bloat in a chain of chords by @Borzik in #10171
  • Fix mock connection interfaces to prevent TypeError during exception handling by @ChickenBenny in #10178
  • fix(trace): dispatch chain/callbacks on dedup fast-path for redelivered tasks by @aurangzaib048 in #10159
  • Extract reconnect_on_error to BaseResultConsumer by @ChickenBenny in #10189
  • pep 649 by @ericbuehl in #10187
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10186
  • Fix#9722 friendly status errors for CLI by @ChickenBenny in #10190
  • docs: clarify after_return behavior for retried tasks by @KianAnbarestani in #10192
  • Add exists() method to AsyncResult by @veeceey in #10142
  • Add compression header to message protocol docs by @Br1an67 in #10156
  • docs: fix duplicated word in bootsteps comment by @Rohan5commit in #10153
  • Remove outdated autoreloader section from extending docs by @Br1an67 in #10154
  • Fix: prioritize request ignore_result over task definition by @patri27826 in #10184
  • Add Google Cloud PubSub dependency group by @dpgraham4401 in #10216
  • Chore(deps): Bump nick-fields/retry from 3 to 4 by @dependabot[bot] in #10213
  • fix: clear the timer while catch the exception by @ChickenBenny in #10218
  • fix(worker): add hub.reset() to synloop on connection error by @antonio-mello-ai in #10204
  • Replace remaining deprecated datetime.utcnow() calls by @as567-code in #10224
  • Fix#10022 request time limits by @ChickenBenny in #10206
  • fix: send the task failure in hard timeout by @ChickenBenny in #10226
  • Add engine_callback to database backend SessionManager by @avolant in #10135
  • feat(redis): support configuring additional connection errors by @abdullahmujahidali in #10158
  • fix: move dedup integration tests to smoke tests by @aurangzaib048 in #10232
  • fix: move prefork shutdown test to smoke tests by @aurangzaib048 in #10236
  • fix: move remaining start_worker() integration tests to smoke tests by @aurangzaib048 in #10239
  • fix: prevent graceful shutdown regression in connection recovery (GH-9705) by @aurangzaib048 in #10242
  • perf(examples): set a timeout on tasks HTTP calls by @EhteshamSid in #10244
  • docs: document return value of AsyncResult.get() and ResultSet.join() by @antonio-mello-ai in #10240
  • docs: clarify broker-specific semantics of task priority by @antonio-mello-ai in #10238
  • fix(base): add timeout to broker pool acquisition to prevent indefinite blocking by @aurangzaib048 in #10174
  • fix#4834 (canvas): fix chord error handling when body is a chain by @aurangzaib048 in #10247
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10249
  • Fix warm shutdown not cancelling prefetched tasks in thread pool by @Aamirofficiall in #10183
  • chore: add Python 3.14 trove classifier by @sk- in #10176
  • Replace archived blacksmith python action with upstream python action by @c32-4e3-844-41ed9dc5d in #10265
  • Update apt-get install command in integration tests by @auvipy in #10267
  • Adjust retry settings in integration-tests.yml by @auvipy in #10268
  • Update apt-get install command in workflow by @auvipy in #10266
  • Bump codecov actions 5 -> 6 by @c32-4e3-844-41ed9dc5d in #10264
  • docs: clarify .delay() usage with signatures in the user guide section by @kittywaresz in #10258
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10261
  • Add all integration tests to the CI matrix by @Izzette in #10259
  • Add libev-dev to Dockerfile dependencies by @auvipy in #10270
  • Using patching.modules after module test fixture leaks across test cases by @treszkai in #10256
  • docs: clarify Django settings with the CELERY namespace by @9kernel in #10272
  • fix(consumer): skip prefetch reduction when per-consumer QoS is in effect by @aurangzaib048 in #10253
  • fix(events): skip publish when producer is None to stop memory leak after broker reconnect by @Song-Junho97 in #10277
  • Bump grpcio from 1.76.0 to 1.78.0 by @dependabot[bot] in #10136
  • chore(deps): update sphinx-autobuild requirement from !=2024.9.3,>=2021.3.14 to !=2024.9.3,>=2024.10.3 by @dependabot[bot] in #10279
  • fix#8542: honour per-task serializer and execution options (send_task). by @Krishnachaitanyakc in #10217
  • fix(events): stop leaking exceptions and cancel stale Heart timers by @Song-Junho97 in #10280
  • Deferred ack synloop bug by @jberclaz in #10263
  • Fix head_from_fun following wrapped on Python 3.14+ by @dannon in #10281
  • Add missing stacklevel=2 to 12 warnings.warn() calls by @stef41 in #10260
  • Chore(deps): Bump pytest-github-actions-annotate-failures from 0.3.0 to 0.4.0 by @dependabot[bot] in #10168
  • fix(defaults): default to exclusive queues for RabbitMQ 4.3.0 compatibility by @Nusnus in #10287
  • Revert "fix(defaults): default to exclusive queues for RabbitMQ 4.3.0 compatibility" by @Nusnus in #10289
  • fix(defaults,rpc): RabbitMQ 4.3.0 compatibility by @Nusnus in #10290
  • Removed socket.timeout from reconnection conditions by @constantinblanariu in #10285
  • fix(worker): skip Broadcast queues in native delayed delivery binding by @mina58 in #10293
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10292
  • fix(worker): guard heartbeat control command against None event_dispatcher by @SAY-5 in #10295
  • Chore(deps): Update python-memcached requirement from >=1.61 to >=1.62 by @dependabot[bot] in #10282
  • Chore(deps): Bump pytest from 9.0.2 to 9.0.3 by @dependabot[bot] in #10297
  • Chore(deps): Update gevent requirement from >=1.5.0 to >=26.4.0 by @dependabot[bot] in #10301
  • docs: clarify chord errback signatures by @paulkagiri in #10300
  • Chore(deps): Bump pytest-order from 1.3.0 to 1.4.0 by @dependabot[bot] in #10305
  • fix(redis): keep _reconnect_pubsub compatible with redis-py < 5.3.0 by @SAY-5 in #10298
  • Update boto3 requirement from >=1.26.143 to >=1.43.6 and moto 5.2 by @dependabot[bot] in #10306
  • docs: fix duplicated word in changelog by @lphuc2250gma in #10309
  • Allow Redis backend SSL config with redis URLs by @cyphercodes in #10313
  • Skip empty groups in chains by @puneetdixit200 in #10321
  • Add documentation to workers guide around signal exception bytecode stuff by @sastraxi in #10276
  • Fix worker consuming unexpected queues after connection loss by @phanky1 in #10335
  • Apply backend retry policy to all DatabaseBackend DB operations by @arkadiuszbach in #10334
  • Explain prefetching with late acknowledgments by @wayyoungboy in #10343
  • Handle DST gaps in make_aware by @puneetdixit200 in #10324
  • Fix Consumer.on_close() wiping in-flight reservations and breaking worker_disable_prefetch by @arkadiuszbach in #10345
  • chore(deps): bump cryptography from 46.0.5 to 46.0.7 in /requirements/extras by @dependabot[bot] in #10350
  • Fix: wrap new-style errback calls in try/except to prevent silent chain halt by @r266-tech in #10214
  • Fix Queues.deselect leaking routing-only queues into consumers by @phanky1 in #10348
  • fix(redis): prevent _pending_messages memory leak in ResultConsumer by @goingforstudying-ctrl in #10342
  • Fix free worker stalling after broker reconnect (AsynPool.flush clearing _busy_workers) by @arkadiuszbach in #10346
  • Revert "fix(redis): prevent _pending_messages memory leak in ResultConsumer" by @Nusnus in #10354
  • Fix add_consumer not restoring consume_from for known queues by @phanky1 in #10352
  • chore(deps): bump codecov/codecov-action from 6 to 7 by @dependabot[bot] in #10349
  • docs(tasks): warn that rate-limited tasks block the worker's prefetch by @DHUKK in #10291
  • Redis ResultConsumer: clean up leaked _pending_messages after on_wait_for_pending by @goingforstudying-ctrl in #10366
  • chore(deps): bump cryptography from 46.0.7 to 48.0.1 in /requirements/extras by @dependabot[bot] in #10368
  • Mark rejected tasks as failed when not requeued by @hmnfalahi in #10369
  • Tolerate task cancellation errors after connection loss by @phanky1 in #10382
  • chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #10362
  • Fix queue selection by alias to store the real queue name by @phanky1 in #10358
  • Raise a clear error instead of a bare ValueError when fast_trace_task's worker registry is empty by @harshitayadavv in #10397
  • Update reserved requests to use new event dispatcher on reconnect by @phanky1 in #10383
  • Preserve group errback mutability by @lxingy3 in #10385
  • Fix pidbox consumer cleanup during reset cycles by @zainnadeem786 in #10363
  • Defer default queue lookup for explicitly routed tasks by @phanky1 in #10357
  • Preserve re-buffered events during dispatcher flush by @phanky1 in #10401
  • Docs: clarify which tasks the celery_worker pytest fixture can run by @sahilkanger in #10378
  • Preserve exception cause when re-raising in a few spots by @tejas-ae in #10257
  • fix(canvas): propagate chained task failures to the chord body by @eyupcanakman in #10323
  • Move custom-worker integration tests to the smoke suite by @Nusnus in #10410
  • Guard integration tests by @Nusnus in #10411
  • Finalize ResultSet barrier when iter_native begins by @phanky1 in #10407
  • Fix preload options for control command by @theShmoo in #10403
  • fix(canvas): restore GroupResult fan-out in chain as_tuple() (#8903 regression) by @jberclaz in #10408
  • Handle UUID task ids in key-value store backend key generation by @MahinAnowar in #10406
  • Stop eager chain execution on Ignore and Reject by @phanky1 in #10404
  • docs: fix incorrect parameter names in docstrings by @eeshsaxena in #10392
  • Handle EPERM from os.kill in multi stopwait node liveness check by @Ozone317 in #10414
  • Preserve group-buffered events when flush republish fails by @chuenchen309 in #10417
  • chore(deps): bump actions/setup-python from 6 to 7 by @dependabot[bot] in #10423
  • fix: upgrade http:// to https:// in README.rst by @hanu-14 in #10419
  • chore(deps): bump useblacksmith/setup-docker-builder from 1 to 2 by @dependabot[bot] in #10430
  • Fix inconsistencies in systemd service examples by @phanky1 in #10425
  • fix: don't drop buffered events appended during publish by @oliverhaas in #10435
  • Preserve absolute event timestamps in Gossip by @phanky1 in #10418
  • Respect result_extended in the RPC result backend by @phanky1 in #10431
  • Warn when routing options are set as task attributes by @phanky1 in #10453
  • chore(deps): bump github/codeql-action from 4 to 4.37.4 by @dependabot[bot] in #10454
  • RPC result backend recirculates final results on every state poll by @goingforstudying-ctrl in #10459
  • chore(deps): bump github/codeql-action from 4.37.4 to 4.37.6 by @dependabot[bot] in #10469
  • Raise ImproperlyConfigured with install hint when ephem is missing for solar schedules by @locker95 in #10470
  • Normalize aware datetimes into the schedule timezone in crontab.remaining_delta by @MahinAnowar in #10420
  • Reheap beat entries that request to retry later by @phanky1 in #10468
  • Move task_sent and Result deprecations to the 6.0 timeline by @phanky1 in #10455
  • Fix shared retry_kwargs mutation in autoretry by @Namraa310806 in #10461
  • fix(worker): mask credentials in alternates returned by inspect stats by @AleksaMCode in #10485
  • chore(deps): bump useblacksmith/setup-docker-builder from 2 to 2.0.1 by @dependabot[bot] in #10450
  • chore(deps): bump cryptography from 48.0.1 to 50.0.0 in /requirements/extras by @dependabot[bot] in #10483
  • Add MemoryError regression for request callbacks by @sahilmathur254 in #10482
  • chore(deps): bump useblacksmith/setup-docker-builder from 2.0.1 to 2.1.0 by @dependabot[bot] in #10496
  • Fix ineffective traceback clearing in timeout handling by @Namraa310806 in #10493
  • Fix Redis result consumer redundant unsubscribe by @Namraa310806 in #10497
  • Pin socket_timeout in integration test Redis client by @bchrobot in #10498
  • Add datefmt support to ColorFormatter and TaskFormatter by @rahul2002m in #10488
  • Fix autoscale and disable-prefetch for green worker pools by @arkadiuszbach in #10361
  • feature: add celery_beat_task header in task options by @alirafiei75 in #9702
  • Enable heartbeat on the event dispatcher connection by @phanky1 in #10500
  • Fix TypeError when slicing a regen built from a generator by @MahinAnowar in #10501
  • Make result_compression actually compress stored results by @dylanpulver in #10504
  • fix: preserve negative UTC offsets in LocalTimezone.fromutc by @waterWang in #10519
  • fix: handle invalid worker environment values by @Namraa310806 in #10513
  • Fix certificate expiration during verification by @Namraa310806 in #10510
  • chore(deps): bump github/codeql-action from 4.37.6 to 4.37.8 by @dependabot[bot] in #10515
  • Fix KeyError in MongoDB backend for results stored without a request by @dylanpulver in #10503
  • Fix pre-commit formatting error in test_time by @Namraa310806 in #10520
  • fix: crontab.remaining_delta skips later minute slots on an earlier day by @phanky1 in #10494
  • Honor a timeout of 0 in wait_for and ResultSet.join instead of waiting forever by @ckarnell in #10487
  • Mask broker_read_url and broker_write_url in filter_hidden_settings by @phanky1 in #10398
  • Add task_repr_maxlevels setting to control argsrepr/kwargsrepr depth by @phanky1 in #10371
  • docs(whatsnew): clarify gevent/eventlet pool requirement in Celery 5 migration guide by @zainnadeem786 in #10360
  • handle beat_cron_starting_deadline correctly for non-uniform crontabs by @phanky1 in #10315
  • tests: Add explicit tests for worker broker retry behavior by @LOGESHWAR123 in #10356
  • chore(deps): update mock requirement from >=1.3 to >=5.2.0 by @dependabot[bot] in #10308
  • Document EventReceiver's first argument under the name it actually has by @darkdi in #10460
  • chore(deps): bump pytest from 9.0.3 to 9.1.1 by @dependabot[bot] in #10522
  • Update README.rst by @auvipy in #10521
  • docs(gevent): document monkey-patching entrypoint requirement (#10067) by @harmehak0173 in #10481
  • docs: describe canvas calling behavior accurately by @Whning0513 in #10447
  • docs: clarify acks late versus retry behavior by @Whning0513 in #10448
  • docs: link worker settings to CLI options by @Whning0513 in #10445
  • docs: Fix grammar errors in extending user guide by @LaRoyBot in #10429
  • docs: show SQS FIFO message properties directly by @Whning0513 in #10446
  • docs: document scheduling groups and workflows periodically by @sahilkanger in #10428
  • docs: document purpose of bulk_task_producer.py example by @Mahir-Panchal in #10399
  • Replace static analysis hack in __init__.py with TYPE_CHECKING guard by @tobyh-canva in #10409
  • Fix typo by @leetrout in #10365
  • docs: document single-argument link_error errback used by send_task by @sahilkanger in #10427
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10296
  • chore(deps): update pytest-subtests requirement from >=0.14.1 to >=0.15.0 by @dependabot[bot] in #10523
  • Chore(deps-dev): Bump isort from 7.0.0 to 8.0.1 by @dependabot[bot] in #10170
  • Chore(deps): Bump sphinx-click from 6.1.0 to 6.2.0 by @dependabot[bot] in #10169
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10537
  • Remove redundant maybe_signature call in unlock_chord by @phanky1 in #10395
  • Cache extension entry-point discovery to fix apply_async CPU overhead by @ghirailghiro in #10516
  • Bound State._tasks_to_resolve to fix unbounded memory growth by @ghirailghiro in #10534
  • Fix DjangoTask selection for Celery subclasses without a custom task class by @phanky1 in #10529
  • Honor a timeout of 0 in get_many instead of polling forever by @dylanpulver in #10524
  • Chore(deps): Bump pytest-cov from 7.0.0 to 7.1.0 by @dependabot[bot] in #10540
  • Chore(deps): Bump github/codeql-action from 4.37.8 to 4.37.9 by @dependabot[bot] in #10542
  • Fix the delay beat returns when the heap top changes by @phanky1 in #10531
  • Chore(deps): Update elasticsearch requirement from <=9.3.0 to <=9.5.0 by @dependabot[bot] in #10541
  • Fix: DatabaseBackend now honors result_serializer (#3025) by @ghirailghiro in #10536
  • Honour config_from_object(silent=True) on the lazy config load by @ArockiaRajamanickam in #10532
  • Chore(deps): Update pyarango requirement from >=2.0.2 to >=2.1.1 by @dependabot[bot] in #10544
  • Chore(deps): Bump cryptography from 50.0.0 to 50.0.1 by @dependabot[bot] in #10543
  • Change kombu dependency to pypi release by @auvipy in #10549
  • Update kombu dependency to use pypi release only by @auvipy in #10552
  • Modify default Python versions in workflow by @auvipy in #10551
  • Update CI matrix to exclude Python 3.10 and 3.14t by @auvipy in #10550
  • Parameterize integration test Dockerfile by Python version by @auvipy in #7610
  • Fix connection leak in the celery_worker pytest fixture by @phanky1 in #10512
  • Update default Python versions in smoke tests by @auvipy in #10556
  • Apply ChainMap._key consistently across its methods by @phanky1 in #10545
  • [Bug] chord hangs when a member is revoked through app.control.revoke by @goingforstudying-ctrl in #10527
  • Chore(deps): Update pytest-rerunfailures requirement from >=15.0 to >=16.6 by @dependabot[bot] in #10547
  • Show original and prefixed keys in configuration KeyError by @phanky1 in #10559
  • Forward chord body routing options to chord_unlock by @phanky1 in #10442
  • Fix beat sleeping too long when is_due changes the heap by @phanky1 in #10558
  • Chore(deps): Update wheel requirement from >=0.33.1 to >=0.48.0 by @dependabot[bot] in #10557
  • Chore(deps): Bump grpcio from 1.78.0 to 1.83.1 by @dependabot[bot] in #10539
  • Fix celery worker shutdown timeout example by @mgaitan in #10416
  • Fix --detach stalling in Docker containers with high fdmax (#9886) by @GangEunzzang in #10080
  • Fix crontab state restoration across persistence cycles by @MarthalaJagruthiReddy in #10563
  • Document how the Redis broker stores messages by @GebleaAlex in #10566
  • Return Option objects consistently from find() by @phanky1 in #10565
  • Propagate setup logging signal errors by @GruffElixir in #10568
  • Honour broker connection retry settings when purging at startup by @MahinAnowar in #10567
  • Fix Signature.clone() sharing kwargs with the original signature by @tritsystem in #10571
  • fix(worker): bound already-open broker sockets before connection teardown (GH-9705) by @aurangzaib048 in #10570
  • Chore(deps): Update click-repl requirement from >=0.2.0 to >=0.3.0 by @dependabot[bot] in #10572
  • Chore(deps): Bump pytest-order from 1.4.0 to 1.5.0 by @dependabot[bot] in #10573
  • Chore(deps): Bump useblacksmith/setup-docker-builder from 2.1.0 to 2.2.0 by @dependabot[bot] in #10574
  • Revert "[Bug] chord hangs when a member is revoked through app.control.revoke" by @phanky1 in #10564
  • Chore(deps): Update pytest-rerunfailures requirement from >=16.6 to >=16.6.1 by @dependabot[bot] in #10580
  • Chore(deps): Update cassandra-driver requirement from <4,>=3.25.0 to >=3.30.1,<4 by @dependabot[bot] in #10581
  • docs: repoint dead :ref: targets to the getting-help/bug-tracker labels by @simpleqt in #10578
  • prefork is not safe anymore by @superboum in #10339
  • docs(result): drop doubled 'in in' in the ResultSet class comment by @simpleqt in #10577
  • Chore(deps): Update sphinx requirement from >=7.0.0 to >=8.1.3 by @dependabot[bot] in #10548
  • Detect spawned pool children in process_initializer by @GangEunzzang in #10583
  • Allow worker_pool_start_method='spawn' with the asynchronous prefork pool by @GangEunzzang in #10584
  • Keep preconfigured values out of configuration defaults by @phanky1 in #10575
  • Document interaction between rate_limit and countdown/eta by @istoolsfox in #10595
  • Chore(deps): Bump pytest-github-actions-annotate-failures from 0.4.0 to 0.4.2 by @dependabot[bot] in #10591
  • Chore(deps): Bump google-cloud-firestore from 2.23.0 to 2.30.0 by @dependabot[bot] in #10590
  • Chore(deps): Update tox requirement from >=3.8.4 to >=4.61.2 by @dependabot[bot] in #10589
  • Clean up Docker examples in the contributing guide by @phanky1 in #10587
  • Chore(deps): Update azure-storage-blob requirement from >=12.15.0 to >=12.30.1 by @dependabot[bot] in #10601
  • Honor zero timeouts in the result drainer by @phanky1 in #10603
  • Keep the execv flag from leaking between tests by @GangEunzzang in #10596
  • Make ConfigurationView membership match key lookup by @phanky1 in #10586
  • Respect map order in ConfigurationView lookups by @phanky1 in #10597
  • Chore(deps): Update exceptiongroup requirement from >=1.3.0 to >=1.3.1 by @dependabot[bot] in #10600
  • Include _keys in ConfigurationView.swap_with() by @phanky1 in #10604
  • Chore(deps): Update click-didyoumean requirement from >=0.3.0 to >=0.3.1 by @dependabot[bot] in #10599
  • Add runtime in success signal by @sasirven in #9516
  • Retain fallback context managers until exit by @GangEunzzang in #10610
  • Preserve explicitly supplied empty timer schedules by @GangEunzzang in #10609
  • Fix: query_task doesn't find tasks scheduled with an ETA/countdown (#5321) by @ghirailghiro in #10535
  • Docs: add missing @app.task decorator to chain example by @rmnvg in #10613
  • Fix Redis result compression with decode_responses enabled by @phanky1 in #10612
  • docs: fix 'allows to' grammar in dont_autoretry_for docs by @mrchatam in #10615
  • docs: fix 'Allows to' grammar in configuration settings by @mrchatam in #10617
  • fix(canvas): propagate aggregate_duplicates through nested stamp merges by @MehrazRumman in #10616
  • Deny access to private attributes and dunders via registered() by @ndaprela in #10602
  • Fix argument forwarding through nested chains in eager execution by @aprylewu in #10611
  • Replacing a task with a chain which contains a group now returns a result instead of hanging by @auvipy in #9604
  • Fix linked signature option isolation during deepcopy by @Yukibei in #10594
  • added new regression test to check issue #3885 by @auvipy in #10622
  • Prevent add_defaults() from crashing when config_from_object() fails on an already configured app by @phanky1 in #10621
  • fix(backends.database): store task children with database backend (#8336) by @VimalN2005 in #10606
  • Prevent spawned worker crashes with explicit lazy=True by @phanky1 in #10619
  • Redact SAS tokens and lowercase account keys in AzureBlockBlobBackend.as_uri by @Dev-next-gen in #10620
  • Preserve configuration when copying settings by @GangEunzzang in #10623
  • Warn when two callables collide under one task name (#10576) by @vasilisnasopoulos in #10598
  • Chore(deps): Bump github/codeql-action from 4.37.9 to 4.38.0 by @dependabot[bot] in #10630
  • Task.replace() crashes with tuple-backed chains by @phanky1 in #10626
  • Chore(deps): Update gevent requirement from >=26.4.0 to >=26.8.0 by @dependabot[bot] in #10629
  • Prevent apply_async() from mutating cached execution options by @phanky1 in #10624
  • Chore(deps): Bump pycouchdb from 1.16.0 to 1.17.1 by @dependabot[bot] in #10627
  • Chore(deps-dev): Bump isort from 8.0.1 to 9.0.1 by @dependabot[bot] in #10628
  • try python 3.15 pre release on the CI by @auvipy in #10636
  • Chore(deps): Update sphinx2rst requirement from >=1.0 to >=1.1.0 by @dependabot[bot] in #10639
  • Chore(deps): Bump mypy from 1.19.1 to 2.3.1 by @dependabot[bot] in #10638
  • Set default max priority in Queues.setitem() when the queue has none by @phanky1 in #10645
  • backends.by_url() should accept backend classes by @phanky1 in #10635
  • Fix celery multi crashing on a single node name containing a dash by @Dev-next-gen in #10643
  • Rebuild the GCS storage client after a fork when Firestore is touched first by @Dev-next-gen in #10641
  • Chore(deps): Update tox requirement from >=4.61.2 to >=4.61.4 by @dependabot[bot] in #10640
  • Chore(deps): Update pydantic requirement from >=2.4 to ==2.13.5 by @dependabot[bot] in #10654
  • Fix empty group/chain handling in chains and group headers (#9772) by @MehrazRumman in #10646
  • Chore(deps): Update sphinx-celery requirement from >=2.1.1 to >=2.1.3 by @dependabot[bot] in #10656
  • Remove explicit garbage collection from test fixture teardown by @phanky1 in #10648
  • Support queue aliases in Queues.deselect() by @phanky1 in #10649
  • Chore(deps): Update boto3 requirement from >=1.43.6 to >=1.43.93 by @dependabot[bot] in #10655
  • Update click-repl version to 0.4.0 by @auvipy in #10658
  • Fix intermittent failure in backend teardown integration test by @phanky1 in #10662
  • Update billiard version requirement to 4.3.0 by @auvipy in #10659
  • Update billiard dependency in dev requirements by @auvipy in #10670
  • Keep a cancelled task unacked when the child reports SystemExit by @GangEunzzang in #10667
  • Skip empty groups in eager chains by @superh123 in #10644
  • Return the exact fractional utcoffset() instead of rounding it by @bodapatisaikrishna in #10625
  • Chore(deps): Update pre-commit requirement from >=4.0.1 to >=4.6.2 by @dependabot[bot] in #10665
  • Store failures raised as BaseException subclasses with the JSON serializer by @GangEunzzang in #10672
  • fix(backends.database): store stamping metadata with extended results (#8887) by @VimalN2005 in #10605
  • Chore(deps): Update azure-identity requirement from >=1.19.0 to ==1.25.3 by @dependabot[bot] in #10666
  • Chore(deps): Update flake8 requirement from >=3.8.3 to ==7.3.0 by @dependabot[bot] in #10664
  • Fix package version specifications in test.txt and upgrade moto by @auvipy in #10660
  • fix(app.utils): handle multi-server URLs in sanitize_url and bugreport (#8014) by @VimalN2005 in #10607
  • Refresh AMQP task routes for all configuration update forms by @phanky1 in #10673
  • Redis result backend: serialize pubsub access between the drainer and result cleanup by @goingforstudying-ctrl in #10671
  • Wait for the replacement child in the smoke respawn test by @GangEunzzang in #10674
  • Queues.setitem() should apply the default routing key by @phanky1 in #10669
  • Add the request context to task_failure in case of lost worker by @caspervdw in #9720
  • Fix revoked tasks running anyway after mingle merged revoke stamps from another host by @yauhpl-alt in #10668
  • Update kombu version to 5.7.0a1 by @auvipy in #10677
  • Expect the prefetch reduction to be skipped under per-consumer QoS by @GangEunzzang in #10682
  • Keep the Azure Block Blob backend picklable by @Dev-next-gen in #10647
  • Keep a finished result when a revoke arrives for the task by @GangEunzzang in #10679
  • Chore(deps): Bump grpcio from 1.83.1 to 1.84.0 by @dependabot[bot] in #10686
  • Chore(deps): Bump github/codeql-action from 4.38.0 to 4.38.1 by @dependabot[bot] in #10687
  • Chore(deps): Update elasticsearch requirement from <=9.5.0 to <=9.5.1 by @dependabot[bot] in #10685
  • Added Changelog for v5.7.0a1 Alpha 1 release by @auvipy in #10688
  • Bump version: 5.6.3 → 5.7.0a1 by @auvipy in #10690
  • Add a smoke test workflow that runs against py-amqp, Kombu and Billiard main by @GangEunzzang in #10676
  • fix(backends/couchbase): missing document raises instead of returning None by @simpleqt in #10680
  • Preserve propagate in nested native result joins by @GangEunzzang in #10689
  • Chore(deps): Update boto3 requirement from >=1.43.93 to >=1.43.98 by @dependabot[bot] in #10695
  • Fix cache directory ownership in Docker builds by @phanky1 in #10707
  • Modify apt-get install to add libmemcached-dev and libev-dev by @auvipy in #10709
  • Chore(deps): Update click requirement from <9.0,>=8.1.2 to >=8.5.0,<9.0 by @dependabot[bot] in #10696
  • Chore(deps): Update tox requirement from >=4.61.4 to ==4.64.3 by @dependabot[bot] in #10684
  • fix: add missing spaces in three backend exception messages by @simpleqt in #10650
  • docs: fix the malformed celery[tblib] bundle term in README by @simpleqt in #10651
  • Fix escaped percent signs in node formatting by @jakezwang in #10663
  • fix(backends): keep forget() idempotent on elasticsearch and couchdb by @simpleqt in #10697
  • Docs: broker_heartbeat_checkrate default is 3.0, not 2.0 by @ZainnQureshii in #10710
  • Use the merged retry policy for before_task_publish and task-sent events by @phanky1 in #10708
  • Replace deprecated codecs.open in celery upgrade settings by @Barry-Lenhart in #10706
  • Apply index lists like -c:1,2 to named nodes in celery multi by @Dev-next-gen in #10661
  • fix(backends): keep forget() idempotent on azureblockblob and cosmosdb by @inchang-ing in #10714
  • Redis result backend: don't hold the pubsub lock while waiting for messages by @GangEunzzang in #10715
  • fix(backend): handle missing ArangoDB documents on delete by @Namraa310806 in #10701
  • fix(redis): defer re-entrant cancel_for to avoid GC-driven pub/sub deadlock by @MehrazRumman in #10716
  • ci: stop installing sphinx-autobuild in test envs and harden pip against index timeouts by @MehrazRumman in #10721
  • fix(utils): BufferMap ignores bufmaxsize and miscounts total by @simpleqt in #10705
  • Pin cassandra-driver version specification by @auvipy in #10732
  • Chore(deps): Bump ephem from 4.2 to 4.2.1 by @dependabot[bot] in #10729
  • Chore(deps): Bump github/codeql-action from 4.38.1 to 4.38.2 by @dependabot[bot] in #10730
  • Chore(deps): Update python-dateutil requirement from >=2.8.2 to >=2.9.0.post0 by @dependabot[bot] in #10727
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10723
  • Chore(deps): Bump pytest-rerunfailures from 16.6.1 to 16.7 by @dependabot[bot] in #10740
  • Chore(deps): Bump azure-storage-blob from 12.30.1 to 12.30.3 by @dependabot[bot] in #10741
  • Add opt-in remote control (inspect ping) support to celery beat by @Ozone317 in #10422
  • fix(worker): flush buffered events with hub.call_soon() by @oliverhaas in #10736
  • Publish the Cassandra session only once the connection is ready by @Dev-next-gen in #10657
  • docs: update default value of interval_max in retry_policy by @Aswin1105 in #10717
  • Avoid calling isoformat() on protocol v1 ETA and expiration strings by @phanky1 in #10720
  • Refactor owned_by to use dictionary comprehension by @auvipy in #10742
  • Make worker_concurrency cgroup-aware via --concurrency=auto by @sashu2310 in #10328
  • fix(canvas): apply countdown and eta to the chord header by @00200200 in #10735
  • fix(consumer): preserve pending operation order by @HassanRady in #10734
  • multi: expand ~ in --workdir for spawned workers by @ryanakml in #10739
  • Chore(deps): Bump flake8 from 7.3.0 to 7.4.1 by @dependabot[bot] in #10747
  • Chore(deps): Bump google-cloud-firestore from 2.30.0 to 2.32.0 by @dependabot[bot] in #10748
  • Chore(deps): Update google-cloud-storage requirement from >=2.10.0 to >=3.15.0 by @dependabot[bot] in #10753
  • Fix(utils): don't cut regen iteration short when consumed elsewhere mid-loop by @MehrazRumman in #10756
  • fix: handle AttributeError in iterate_file_descriptors_safely after connection loss by @rmotgi1227 in #10318
  • docs: remote control commands get a state object, not ControlDispatch by @Zir0-93 in #10770
  • Fail the chords after a chord whose header failed by @Borzik in #10767
  • Stop firstmethod() from swallowing AttributeError by @phanky1 in #10774
  • Fix geometric message bloat in a chain of implicit chords by @Borzik in #10743
  • fix(events): synchronize EventDispatcher shutdown with publishing by @HassanRady in #10745
  • fix(backends): upsert CosmosDB results so later states are stored by @devjoinedthechat in #10746
  • docs: document PGMQ broker with SQLAlchemy results in PostgreSQL by @tavallaie in #10777
  • fix(canvas): resolve the app of a chain or chord through its tasks by @Mohamed-Elshesheny in #10749
  • Docs: correct the default value of worker_task_log_format by @hossam1244 in #10786
  • Tell apart signal receivers bound to different instances by @wfatih in #10699
  • fix(result): keep EagerResult.name when copied or pickled by @MehrazRumman in #10773
  • fix(canvas): don't raise in chain.app when the first task's canvas holds a dict by @MehrazRumman in #10792
  • Modify Codecov action configuration by @auvipy in #10799
  • Simplify Codecov upload conditions in workflow by @auvipy in #10800
  • Update click versions in default.txt by @auvipy in #10801
  • Update billiard version to 4.3.1 or higher by @auvipy in #10802
  • Fix Beat scheduler connection cleanup on shutdown by @HassanRady in #10776
  • Add pymemcache support by @TheoCouss in #9977
  • Finish a half-read child result on prefork shutdown and ack during the join by @tuliodesouza in #10768
  • Chore(deps-dev): Bump isort from 9.0.1 to 9.0.2 by @dependabot[bot] in #10754
  • Chore(deps): Bump gevent from 26.8.0 to 26.9.0 by @dependabot[bot] in #10807
  • Chore(deps): Update elastic-transport requirement from <=9.2.1 to <=9.4.2 by @dependabot[bot] in #10806
  • Update kombu version to 5.7.0b1 by @auvipy in #10809
  • Fix countdown, expiration, and Beat intervals across DST transitions by @phanky1 in #10769
  • Remove version constraints for redis in requirements by @auvipy in #10810
  • test(consumer): pin reconnect prefetch reduction to green-pool capacity (regression test for #10803) by @ShahafChen in #10804
  • fix(result): raise TaskRevokedError from EagerResult.get() after revoke() by @MehrazRumman in #10772
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #10805
  • Fix leaf-value collection in the AsyncResult.collect example by @mottopanikeiku in #10811
  • Limit the Django fixup's signal handlers to its own app by @MehrazRumman in #10731
  • Release v5.7.0b1 beta 1 by @auvipy in #10812
  • Chore(deps): Bump cryptography from 50.0.1 to 50.0.2 by @dependabot[bot] in #10815
  • Chore(deps): Update boto3 requirement from >=1.43.98 to >=1.43.108 by @dependabot[bot] in #10820
  • Fix send_task ETA and expiration calculations across DST transitions by @phanky1 in #10813
  • Chore(deps): Bump azure-storage-blob from 12.30.3 to 12.31.0 by @dependabot[bot] in #10825
  • Chore(deps): Bump tox from 4.64.3 to 4.64.9 by @dependabot[bot] in #10832
  • Align pymemcache minimum version with RetryingClient support by @phanky1 in #10831
  • docs: fix broker_use_ssl setting target swallowed into previous paragraph by @SatvikMishra08 in #10847
  • docs: fix unresolved mailing-list/IRC links in contributing guide and introduction by @SatvikMishra08 in #10848
  • Fix: honor regen source replacement during cached iteration by @phanky1 in #10823
  • Fix prefork write generators raising StopIteration (PEP 479) by @ayushin in #10842
  • fix(canvas): keep eager group apply off the result backend by @jayzhou2309 in #10750
  • Fix MongoDB result cleanup across DST transitions by @phanky1 in #10852
  • Avoid geometric message growth in standalone chord bodies by @MokiMeow in #10824
  • Fix IndexError when a chain is an empty group followed by an empty chain by @MehrazRumman in #10834
  • Build chains in a single pass instead of folding with | by @LD-RW in #10840
  • fix(redis): add result_chord_expires for chord keys by @ChristianMurphy in #10827
  • fix(backends): avoid get_state for plain chain failures by @Namraa310806 in #10836
  • Send the worker hostname as the worker_process_init sender by @IslamElsayed in #10849
  • Reset autoscale keepalive for immediate tasks by @zhechen-cs in #10839
  • Don't call setup_defaults twice when creating a Worker by @Mannava-Daasaradhi in #10828
  • fix: redact Azure credentials in diagnostic output by @Namraa310806 in #10822
  • Fix duplicate nodes in a chain's as_tuple() after a group by @halilunay in #10829
  • feat(redis): add result_failure_expires setting by @ChristianMurphy in #10826
  • Fix errback arity classification with stored signature arguments by @sergioperezcheco in #10838
  • docs: fix stray RST markup in changelog entries by @SatvikMishra08 in #10851
  • Chore(deps): Bump github/codeql-action from 4.38.2 to 4.38.3 by @dependabot[bot] in #10860
  • Chore(deps): Update pymemcache requirement from >=3.5.0 to >=4.0.0 by @dependabot[bot] in #10859
  • feat(worker): add task_retry_on_worker_lost to limit requeues after worker loss by @abdullahmujahidali in #10843
  • Fix Celery Beat relative schedule rounding across DST transitions by @HassanRady in #10818
  • fix(cache): keep chords alive past result_expires by @ChristianMurphy in #10830
  • Fix chain/group repr mangling task names and arguments by @LemonCondor in #10855
  • Keep a nested group from taking its parent group's id by @halilunay in https://github.com/celery/celery/pull/10857
  • Chore(deps): Bump azure-identity from 1.25.3 to 1.26.0 by @dependabot[bot] in https://github.com/celery/celery/pull/10863
  • Accept Pydantic models when calling a pydantic=True task by @Om-singhaI in https://github.com/celery/celery/pull/10844
  • Skip exited children in AsynPool._help_stuff_finish by @esauser in https://github.com/celery/celery/pull/10861
  • Fix/database backend cleanup timezone by @Namraa310806 in https://github.com/celery/celery/pull/10866
  • Only copy declared stamps into task execution options by @phanky1 in https://github.com/celery/celery/pull/10853
  • Fire chain link once on the last task in eager chains by @superh123 in https://github.com/celery/celery/pull/10864
  • Fix worker expiration checks during DST fall back by @phanky1 in https://github.com/celery/celery/pull/10868
  • Pass preload options to commands that do not accept them by @Cherith1222 in https://github.com/celery/celery/pull/10837
  • Fix exponential message growth in chains of groups by @Grivn in https://github.com/celery/celery/pull/10873
  • Remove unused AQLQueryError import from arangodb backend by @TheNetherWatcher in https://github.com/celery/celery/pull/10878
  • Fix task execution after ETA conversion failure by @Namraa310806 in https://github.com/celery/celery/pull/10876
  • Chore(deps): Update boto3 requirement from >=1.43.108 to >=1.43.113 by @dependabot[bot] in https://github.com/celery/celery/pull/10869
  • Fix invalid Bandit baseline JSON and validate it before commit by @maple-pwn in https://github.com/celery/celery/pull/10766
  • Update kombu version to 5.7.0rc1 by @auvipy in https://github.com/celery/celery/pull/10882
  • Release Preparation for v5.7.0rc1 Release Candidate by @auvipy in https://github.com/celery/celery/pull/10887
  • Chore(deps): Update click-plugins requirement from >=1.1.1 to >=1.1.1.2 by @dependabot[bot] in https://github.com/celery/celery/pull/10899
  • Keep celery beat running when a schedule entry fails, and reject impossible crontab dates by @Kavin-Nithil in https://github.com/celery/celery/pull/10896
  • Ensure worker shutdown state is set even if the shutdown handler's logging/signal dispatch raises by @seanmuth in https://github.com/celery/celery/pull/10738
  • Chore(deps): Bump github/codeql-action from 4.38.3 to 4.39.0 by @dependabot[bot] in https://github.com/celery/celery/pull/10900
  • Remove redundant priority fallback in Task.apply_async() by @phanky1 in https://github.com/celery/celery/pull/10867
  • Chore(deps): Update django requirement from >=2.2.28 to >=3.2.1 by @dependabot[bot] in https://github.com/celery/celery/pull/10816
  • Cover the second call of _ensure_after_fork in a test by @ChristianMurphy in https://github.com/celery/celery/pull/10924
  • test: assert exact task replacement nesting levels by @ZedingZhang in https://github.com/celery/celery/pull/10925
  • Use the documented retry defaults in the database backend by @ChristianMurphy in https://github.com/celery/celery/pull/10921
  • fix(utils): don't expire or evict re-added LimitedSet items using their old timestamp by @MehrazRumman in https://github.com/celery/celery/pull/10758
  • Cancel only per-connection timer entries on broker reconnect instead of clearing the worker timer (#10888) by @MehrazRumman in https://github.com/celery/celery/pull/10901
  • Run a replaced task's callbacks once when it is replaced with a chain by @mottopanikeiku in https://github.com/celery/celery/pull/10927
  • Fix solar schedule timing across DST changes by @phanky1 in https://github.com/celery/celery/pull/10915
  • Chore(deps): Bump pydantic from 2.13.5 to 2.14.1 by @dependabot[bot] in https://github.com/celery/celery/pull/10903
  • Pass values to backend hooks by position again by @ChristianMurphy in https://github.com/celery/celery/pull/10918
  • Don't mark a task REVOKED while another worker runs it by @ChristianMurphy in https://github.com/celery/celery/pull/10922
  • Fix retry argument conflicts when switching calling conventions by @StasShk in https://github.com/celery/celery/pull/10895
  • Keep the first SUCCESS in the database backend by @ChristianMurphy in https://github.com/celery/celery/pull/10920
  • Fix incorrect sentence in user guide by @dumb-programmer in https://github.com/celery/celery/pull/10902
  • Docs: note the quorum queue delivery limit by @muhammad-a-dev in https://github.com/celery/celery/pull/10926
  • Fix MultiParser to honor its configured Node class by @ZedingZhang in https://github.com/celery/celery/pull/10938
  • Give entries copied by LimitedSet.update() this set's sequence numbers by @MehrazRumman in https://github.com/celery/celery/pull/10943
  • Count each chord header task only once in the Redis backend by @ChristianMurphy in https://github.com/celery/celery/pull/10919
  • Don't record FAILURE when on_success raises after SUCCESS was stored by @gyanu2507 in https://github.com/celery/celery/pull/10759
  • Don't fail a task whose SUCCESS was stored before the worker was lost by @gyanu2507 in https://github.com/celery/celery/pull/10752
  • Chore(deps): Bump tox from 4.64.9 to 4.65.0 by @dependabot[bot] in https://github.com/celery/celery/pull/10935
  • Fix Manager warning output during retries by @ZedingZhang in https://github.com/celery/celery/pull/10948
  • Allow ResultSet.add() after the set's results are ready by @mottopanikeiku in https://github.com/celery/celery/pull/10930
  • Log connection retry traceback at debug level by @ZedingZhang in https://github.com/celery/celery/pull/10939
  • Fix stamped header revocation by @Namraa310806 in https://github.com/celery/celery/pull/10884
  • mongodb backend: keep the first SUCCESS instead of overwriting it by @aniketatgithub in https://github.com/celery/celery/pull/10944
  • fix(canvas): give a chord's link/link_error options to its body only by @subham-hq in https://github.com/celery/celery/pull/10778
  • fix(utils): keep the closing bracket when saferepr truncates the last element by @MehrazRumman in https://github.com/celery/celery/pull/10771
  • fix(app): raise a clear error when @shared_task is applied twice by @myayush in https://github.com/celery/celery/pull/10889
  • Update PR template with AI spamming guidelines by @auvipy in https://github.com/celery/celery/pull/10979
  • Chore(deps): Bump grpcio from 1.84.0 to 1.84.1 by @dependabot[bot] in https://github.com/celery/celery/pull/10973
  • Chore(deps): Bump github/codeql-action from 4.39.0 to 4.39.1 by @dependabot[bot] in https://github.com/celery/celery/pull/10974
  • Keep the first SUCCESS in the Cassandra backend by @ZedingZhang in https://github.com/celery/celery/pull/10945
  • Stop gating task publishing signals on cached receiver lists by @phanky1 in https://github.com/celery/celery/pull/10791
  • fix(backends): track every AsyncResult waiting on a task id (GH-4925) by @aurangzaib048 in https://github.com/celery/celery/pull/10956
  • Replace brotlipy with brotlicffi in the brotli extra by @illia-v in https://github.com/celery/celery/pull/10992
  • Chore(deps): Bump mypy from 2.3.1 to 2.4.0 by @dependabot[bot] in https://github.com/celery/celery/pull/10984
  • Docs: Improve signature documentation by @dyp1109 in https://github.com/celery/celery/pull/10978
  • fix: prevent worker hang in WorkerLostError when result_backend_always_retry=True by @majidkhazaei in https://github.com/celery/celery/pull/10960
  • Merge signature options in map/starmap apply_async by @mayuriphad in https://github.com/celery/celery/pull/10787
  • Update Brotli dependencies for PyPy and CPython by @auvipy in https://github.com/celery/celery/pull/10994
  • Enhance timezone localization tests by @auvipy in https://github.com/celery/celery/pull/10996
  • Wait between retries when the broker refuses a callback publish by @its-amann in https://github.com/celery/celery/pull/10975
  • Add guidance for AI agents in Celery project by @auvipy in https://github.com/celery/celery/pull/10999
  • Fix send_task() overriding ignore_result defaults by @phanky1 in https://github.com/celery/celery/pull/10953
  • Update billiard and click-repl versions in requirements by @auvipy in https://github.com/celery/celery/pull/11002
  • Preserve ignore_result overrides across task retries by @phanky1 in https://github.com/celery/celery/pull/10958
  • Chore(deps): Bump azure-storage-blob from 12.31.0 to 12.31.1 by @dependabot[bot] in https://github.com/celery/celery/pull/11005
  • Run the mock assertions that sit inside pytest.raises by @dylanpulver in https://github.com/celery/celery/pull/11004
  • Update grpcio version to 1.85.1 by @auvipy in https://github.com/celery/celery/pull/11006
  • Fail the chord when chord_unlock's retry is refused by the broker by @pujitha24 in https://github.com/celery/celery/pull/10959
  • Make Task.apply respect the task.ignore_result default by @phanky1 in https://github.com/celery/celery/pull/11001
  • Update kombu version to 5.7.0 by @auvipy in https://github.com/celery/celery/pull/11007
  • Use Cuba's 2025 fall-back in the midnight DST tests by @MehrazRumman in https://github.com/celery/celery/pull/11011
  • Don't store RETRY for an ignored result when retrying after a lost worker by @MehrazRumman in https://github.com/celery/celery/pull/11009
  • Fix#10997 - redis chord claim cleanup ownership by @Namraa310806 in https://github.com/celery/celery/pull/10998
  • Chore(deps): Bump google-cloud-storage from 3.15.0 to 3.17.1 by @dependabot[bot] in https://github.com/celery/celery/pull/11013
  • Chore(deps): Bump azure-identity from 1.26.0 to 1.27.0 by @dependabot[bot] in https://github.com/celery/celery/pull/11020
  • Fix dead Akismet and vine zipball links in the docs by @MehrazRumman in https://github.com/celery/celery/pull/11021
  • Added changelog and new features for celery v5.7.0 stable version by @auvipy in https://github.com/celery/celery/pull/11016
  • Make beat's pidbox stop test tolerate slow runners by @MehrazRumman in https://github.com/celery/celery/pull/11024
  • Bump version: 5.7.0rc1 → 5.7.0 by @auvipy in https://github.com/celery/celery/pull/11025

New Contributors

Full Changelog: v5.6.3...v5.7.0

Don't miss a new celery release

NewReleases is sending notifications on new releases.