- spring-kafka#4727: Commit through the last record of the batch on
acknowledge()after a partial ack, instead of throwing - spring-amqp#3626: Wait for confirms on the captured physical channel instead of the proxy, so returned channels no longer leak
- celery#10667: Keep a task cancelled by cold shutdown unacked, so it is requeued instead of lost
- celery#10715: Release the Redis pubsub lock while waiting for messages, so
result.get()under gevent no longer hangs - celery#10679: Skip the
REVOKEDwrite when a task already has a final result, so a chordFAILUREis not overwritten - celery#10080: Close only the fds that are actually open on
--detach, removing minute-long stalls in containers - py-amqp#466: Serialize
frame_writer()with a lock, so concurrent publishers no longer interleave frames
+ 16 more
- celery#10689: Forward
propagateto child results in native joins, so nested failures respectpropagate=False - celery#10676: Add a smoke test workflow that runs against py-amqp, Kombu and billiard
main - celery#10682: Adapt the consumer smoke tests to Kombu 5.7's per-consumer QoS
- celery#10674: Wait for a new child pid in the respawn smoke test to remove a flake
- celery#10672: Prepare any
BaseExceptionbefore encoding, so JSON backends store the failure - celery#10623: Make
app.conf.copy()return a settings object that can be read - celery#10610: Exit the fallback context manager itself, not the value returned by
__enter__() - celery#10609: Keep an explicitly supplied empty
ScheduleinTimer - celery#10596: Stop the execv flag from leaking between tests
- celery#10584: Allow the
spawnstart method with the asynchronous prefork pool - celery#10583: Detect spawned pool children, so they run the worker initialisation
- celery#10076: Document that
task_retrysignal args may beNone - billiard#462: Reject
Poolwith fewer than one process instead of hanging forever - billiard#457: Exit the pool worker after
SystemExit, so a hard time limit no longer stalls the pool - billiard#456: List the fd directory and close only open descriptors in
close_open_fds() - billiard#455: Bind the
closerange()-basedclose_open_fds()that never ran on Python 3
- pytest#15040: Mark editable-installed plugins for assertion rewriting




