Release notes¶
Published GitHub release notes and upcoming drafts live on this permanent page, independently of the documentation version selected elsewhere on this site.
Releases marked In preparation are drafts. Their installation commands and release links become available when the release is published.
Async Batcher 0.3.0¶
Published 2026-11-08 · GitHub release
Async Batcher 0.3.0 adds bounded streaming, callable processors, compatible request groups, and new database and messaging adapters. It also fixes cancellation, shutdown, result routing, and resource ownership across the core and existing adapters. The core retains zero runtime dependencies; install backend clients only through the extras you need.
python -m pip install 'async-batcher==0.3.0'
Read the 0.3.0 documentation and migration guide before upgrading from 0.2.2.
Significant changes and upgrade notes¶
- Python 3.11 or newer is required; Python 3.10 support is removed. Optional SDK requirements are refreshed, including SQLAlchemy 2.0.10+ and Keras 3.15.1+. Keras 2 is no longer supported; install and validate a compatible backend separately. #90, #91
- Invalid configuration and processor results fail explicitly. Unknown constructor options, invalid numeric limits, and unordered, unsized, or incorrectly sized result collections are rejected.
max_batch_size=1is now supported. Process and interpreter pool executors are rejected because they cannot share the batcher's event-loop state. The existing limit defaults remain unchanged; replace the retainedbatch_sizealias withmax_batch_size. #103, #106 - Shutdown waits for accepted work and cleanup. Keep clients and executors alive through shutdown. A timeout leaves graceful cleanup running; await it again or request forced shutdown. A fully stopped core batcher can restart on its original loop. Cancelling a caller does not guarantee that its accepted external write was prevented. #49, #78, #110
- Review adapter assumptions. SQLAlchemy bulk updates require mapped ORM models and primary keys; Core
Tableupdates and UPDATE RETURNING are rejected. DynamoDB enables TLS by default, enforces service batch-count limits, and retries unprocessed requests with bounded backoff. Recheck application retry policies and corrected per-item result behavior during migration. #54, #56, #58, #62, #72
Features¶
- Wrap an existing async or synchronous bulk function with
AsyncBatcher.from_callableand use async context managers for cleanup. #124 - Process sync or async sources with bounded
mapandmap_outcomes; choose input or completion order and retain indexed per-item outcomes. Admission can wait for queue capacity with its own timeout. #127, #136 - Limit batch cost as well as item count, using application estimates such as bytes or tokens. #125
- Group compatible requests with bounded child ownership and aggregate capacity; coalesce equivalent in-flight requests without caching completed results. #129, #137, #140, #144
- Flush accepted work without closing intake, including child-accepted work in grouped batchers. Opt into discarding cancelled requests before dispatch when that fits the operation. #147, #149, #177
- Inspect immutable statistics and payload-free batch events, configure processor context, and optionally omit exception details from library logs. Ship installed-package type information with
py.typed. #128, #131, #134, #138, #143 - Add native Kafka producer batches, ordered MongoDB writes, Pinecone vector operations, and Kinesis/Firehose record batches. DynamoDB reads gain strong consistency and validated projections. #97, #107, #112, #113, #114, #115
Fixes¶
- Prevent duplicate or stranded dispatchers, preserve batch peers when one caller is cancelled, respect the oldest queued item's collection deadline, reject self-shutdown, and propagate
StopIterationwithout hanging requests. Startup failures no longer leave requests queued for unintended later execution. #65, #73, #75, #95, #99, #167 - Correct DynamoDB duplicate-key correlation, missing results, key validation, empty batches, and unsupported write operations. #59, #64, #67, #92
- Release SQLAlchemy sessions, preserve INSERT RETURNING order and heterogeneous parameter dictionaries, and honor Scylla model connections and counter-batch rules. #55, #58, #93, #98, #105
- Combine Keras samples into a dense batch, preserve structured prediction results, and keep scikit-learn sparse inputs and predictions sparse. Both prediction adapters expose bounded queues and forward core options. #69, #87, #109, #133
- Remove raw request debug logging and correct example server/client shutdown ordering. #76, #81, #85
Documentation, examples, and maintenance¶
- Publish searchable, versioned documentation with release-specific pages, an explicitly unreleased development channel, and signed documentation archives. #180
- Add application recipes for FastAPI, bounded SQLite imports, atomic resumable checkpoints, rejected-record audits, acknowledged consumers, variable-length inference, durable embedding handoff, and shared provider pacing with bounded throttling retries. These recipes are repository examples, not extra runtime services or an exactly-once delivery guarantee. #130, #132, #152, #153, #155, #157, #168, #175, #178
- Replace Poetry with uv and a committed lockfile. Expand cross-platform core checks, installed-wheel/sdist/type validation, live-service integration tests, locked-dependency auditing, and separate recipe coverage reports. Add reproducible benchmark tooling and documented measurements. #100, #116, #117, #119, #120, #122, #154, #174
Contributors¶
Thanks to @hussein-awala for this release's implementation and maintenance work.
Full changelog: 0.2.2...0.3.0
Async Batcher 0.2.2¶
Published 2025-02-17 · GitHub release
What's Changed¶
- chore: replace _stop and _is_running flags by asyncio events by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/36
- chore: update dependencies by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/37
- chore: replace while 1 by while True for readability by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/38
- docs: update README by explaining how it works and provide more details by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/39
Full Changelog: https://github.com/hussein-awala/async-batcher/compare/0.2.1...0.2.2
Async Batcher 0.2.1¶
Published 2024-09-02 · GitHub release
What's Changed¶
- chore: update the benchmark with v0.2.0 by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/30
- security: bump idna to avoid CVE-2024-3651 by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/31
- security: bump aiohttp to avoid CVE-2024-27306 by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/32
- security: bump scikit-learn to avoid CVE-2024-5206 by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/33
- security: bump setuptools to avoid CVE-2024-6345 by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/34
- security: bump aioboto3 and urllib3 to avoid CVE-2024-37891 by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/35
Full Changelog: https://github.com/hussein-awala/async-batcher/compare/0.2.0...0.2.1
Async Batcher 0.2.0¶
Published 2024-02-29 · GitHub release
Significant changes¶
- Remove support for python 3.8 and 3.9 by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/6
Bug fixes¶
- Fix: update dependencies for Python 3.12 by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/4
- Fix: stop accepting new process request when the batcher is stoped by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/9
- fix: raise the exception when it is returned from process_batch by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/16
- fix: edge case in py312 for semaphore lock by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/24
New features¶
- Feat: Support concurrent batches processing by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/11
- Feat: add a new argument to provide the sync process_batch executor by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/12
- feat(sqlalchemy): Implement AsyncSqlalchemyWriteBatcher to batch Insert and Update by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/18
- feat: add max_queue_size argument to set a limit for buffered items by @hussein-awala in https://github.com/hussein-awala/async-batcher/pull/23
Improvements¶
- Rework batching method to use full asyncio instead of threading by @nmehraein in https://github.com/hussein-awala/async-batcher/pull/1
New Contributors¶
- @nmehraein made their first contribution in https://github.com/hussein-awala/async-batcher/pull/1
Full Changelog: https://github.com/hussein-awala/async-batcher/compare/0.1.0...0.2.0