Skip to content

Releases: cwt/quez

v1.1.3

26 Mar 17:14
@cwt cwt

Choose a tag to compare

v1.1.3: Fix race conditions, deadlocks, and stats consistency
Bug fixes:

  • Fix deadlock in AsyncCompressedDeque: Reorganized lock acquisition so that
    stats updates happen inside _lock instead of using nested locks
    (_stats_lock -> _lock -> _stats_lock pattern caused deadlocks)
  • Fix stats race condition in CompressedDeque: Stats updates are now atomic
    with deque operations, preventing inconsistent counts during eviction
  • Fix stats consistency in queues: Stats are now updated AFTER successful
    queue insertion, not before. This prevents stats from counting items that
    haven't actually entered the queue yet during blocking put operations.
    Type fixes:
  • Add proper type annotations for optional zstd module using cast(ModuleType, ...)
  • Remove dead code in ZstdCompressor.compress() where both branches were
    identical
  • Add type: ignore[import-not-found] for optional uvloop import

v1.1.2

26 Mar 09:50
@cwt cwt

Choose a tag to compare

v1.1.2: Support built-in Zstd in Python 3.14+

  • Check support for built-in Zstd
  • Added ruff as the code linter
  • Updated black
  • Fixed linting errors, reorganized import, and code format

v1.1.0

07 Aug 09:05
@cwt cwt

Choose a tag to compare

Quez v1.1.0 - Nowait and Async Performance Enhanced

  • Adds put_nowait and get_nowait to AsyncCompressedQueue.

  • Adds append_nowait, appendleft_nowait, pop_nowait, and
    popleft_nowait to AsyncCompressedDeque to provide a
    consistent, non-blocking synchronous API.

  • Optimizes the async methods (put, get, append, etc.) in both
    async classes by consolidating serialization/compression and
    deserialization/decompression into single helper functions. This
    reduces the run_in_executor calls from two to one per operation,
    dramatically improving throughput for CPU-bound tasks.

  • Adds comprehensive tests for all new _nowait methods.

  • Updates the benchmark script to measure and compare the performance
    of the new _nowait methods against existing async and sync methods.

v1.0.0

05 Aug 04:59
@cwt cwt

Choose a tag to compare

Quez v1.0.0 - The First Stable Release

This is a huge step for the project, and it means quez is now officially stable and ready for the big leagues. You can feel great about using it in your projects to handle data buffering like a champ, all while saving a ton of memory.

I've packed some powerful new features into this release and polished up the core library, making it your all-in-one tool for compressed data, whether you're working with threads or asyncio.

So, what's new?

The star of the show for v1.0.0 is a pair of awesome new data structures:

  • CompressedDeque: This is your new go-to for a thread-safe, double-ended queue. It works just like collections.deque, so you can add or pop items from either end, fast. And, of course, everything's still compressed behind the scenes!
  • AsyncCompressedDeque: If you're an asyncio fan, you'll love this one. It's the async version of CompressedDeque, giving you all that LIFO and FIFO goodness without blocking your event loop.

With these additions, quez is more flexible than ever and ready to tackle just about any data-handling challenge you can throw at it.

What You Get with v1.0.0

  • Four Awesome Data Structures: CompressedQueue, AsyncCompressedQueue, CompressedDeque, and AsyncCompressedDeque.
  • Pick Your Compression: Stick with the defaults (zlib, bz2, lzma) or plug in speed demons like zstd and lzo.
  • Bring Your Own Serializer: Got a favorite serializer like JSON or msgpack? No problem, it's easy to use your own.
  • See What's Happening: Keep an eye on your memory savings and queue stats in real-time with the handy .stats property.
  • Built Like a Rock: I've put this thing through its paces with a whole bunch of tests to make sure it's reliable and totally thread-safe.

Ready to Dive In?

Getting started is a piece of cake. Just grab the new version from PyPI:

pip install quez==1.0.0