Skip to main content

Hyper-fast queue for Python

Project description

HyperQ

Python 3.10+ License: MIT PyPI version

⚠️ Warning: This package is not ready for production usage yet. It's currently in active development and may have bugs, especially with multiprocessing scenarios using the spawn start method.

Hyper-fast queue for Python - A high-performance queue implementation using Cython and C++ for inter-process communication.

🚀 Features

  • Lightning Fast: Optimized C++ implementation with Python bindings
  • Inter-Process Communication: Shared memory-based queues for high-performance IPC
  • Ring Buffer Architecture: Uses a ring buffer with double virtual memory mapping to the same physical memory.
  • Two Queue Types:
    • HyperQ: General-purpose queue for Python objects
    • BytesHyperQ: Specialized queue for bytes data (even faster)
  • Thread-Safe: Safe for concurrent access
  • Unix-like Systems: Works on Linux and macOS (POSIX-compliant systems)
  • Python 3.10+: Modern Python support

📋 TODO

  • Fix multiprocessing spawn start method bug - Critical issue with multiple consumers/producers
    • Queue doesn't work properly when multiprocessing.set_start_method('spawn') is used
    • Affects scenarios with multiple consumers and producers
  • Add __getstate__ and __setstate__ methods to make queue objects picklable
    • Allow passing queue objects directly to multiprocessing functions
    • Serialize only the shared memory name/descriptor, not the entire queue state
    • Enable seamless integration with multiprocessing.Pool and other parallel processing tools
  • Add timeout support for put() and get() operations
  • Add non-blocking operations (put_nowait(), get_nowait())
    • put_nowait(): Non-blocking put that raises queue.Full if queue is full
    • get_nowait(): Non-blocking get that raises queue.Empty if queue is empty
    • Useful for polling scenarios where you don't want to block the thread
  • Add batch operations for better performance
    • put_many(items): Put multiple items in a single operation
    • get_many(count): Get multiple items in a single operation
    • get_all(): Get all available items at once
    • Reduces synchronization overhead for bulk operations
  • Design decision: Queue name management
    • Option A: Encapsulate queue names (auto-generate, hide from client)
    • Option B: Client specifies queue names (current approach)
    • Option C: Hybrid approach (auto-generate with optional override)
  • Add Windows support (requires different shared memory implementation)
  • Add more comprehensive tests including stress tests and edge cases
  • Add documentation for advanced usage patterns
    • orjson + BytesHyperQ for JSON: Use orjson.dumps() + BytesHyperQ for fastest JSON serialization and transfer.

⚠️ Platform Support

Currently supported:

  • ✅ Linux
  • ✅ macOS

Not supported:

  • ❌ Windows (uses POSIX-specific APIs)
  • ❌ PyPy

🔧 Technical Details

Ring Buffer Implementation

HyperQ uses a ring buffer with double virtual memory mapping to the same physical memory. This eliminates the need for 2 memcpy operations when data wraps around the buffer boundaries.

Shared Memory Architecture

  • Header segment: Contains queue metadata, synchronization primitives, and buffer information
  • Buffer segment: The actual data storage with double virtual memory mapping
  • POSIX shared memory: Uses shm_open() and mmap() for cross-process memory sharing
  • Synchronization: Uses POSIX mutexes and condition variables for thread/process safety

📦 Installation

From PyPI

pip install hyperq

From Source

git clone https://github.com/martinmkhitaryan/hyperq.git
cd hyperq
pip install -e .

Development Installation

git clone https://github.com/martinmkhitaryan/hyperq.git
cd hyperq
pip install -e ".[test]"

🎯 Quick Start

Basic Usage

import multiprocessing as mp
from hyperq import HyperQ, BytesHyperQ

# Create a queue with 1MB capacity
queue = HyperQ(1024 * 1024, name="/my_queue")

# Put data
queue.put("Hello, World!")
queue.put(42)
queue.put({"key": "value"})

# Get data
data = queue.get()  # "Hello, World!"
number = queue.get()  # 42
obj = queue.get()  # {"key": "value"}

Inter-Process Communication

import multiprocessing as mp
from hyperq import HyperQ

def producer(queue_name):
    queue = HyperQ(queue_name)
    for i in range(1000):
        queue.put(f"Message {i}")

def consumer(queue_name):
    queue = HyperQ(queue_name)
    for _ in range(1000):
        message = queue.get()
        print(f"Received: {message}")

if __name__ == "__main__":
    # Create queue in main process
    queue = HyperQ(1024 * 1024, name="/shared_queue")
    queue_name = queue.shm_name

    # Start producer and consumer processes
    p1 = mp.Process(target=producer, args=(queue_name,))
    p2 = mp.Process(target=consumer, args=(queue_name,))

    p1.start()
    p2.start()
    p1.join()
    p2.join()

Bytes-Specific Queue (Faster)

from hyperq import BytesHyperQ

# For bytes data, use BytesHyperQ for better performance
queue = BytesHyperQ(1024 * 1024, name="/bytes_queue")

# Put bytes data
queue.put(b"Hello, World!")
queue.put(b"Binary data")

# Get bytes data
data = queue.get()  # b"Hello, World!"

📊 Performance Benchmarks

HyperQ is designed for high-performance scenarios. Here are some benchmark results:

Hardware:

  • CPU: Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
  • Memory: 16GB
  • OS: macOS 15.3.1
  • Python: 3.10

1 Producer, 1 Consumer

Running bytes performance benchmarks...
================================================================

Results for 100000 messages of 32 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                    0.119976      0.00119976                  833499
HyperQ                         0.421588      0.00421588                  237198
multiprocessing.Queue          2.09399       0.0209399                    47755
faster-fifo                    2.36328       0.0236328                    42314
🏆 Fastest: BytesHyperQ with 833,499 items/s
   3.5x faster than HyperQ
   17.5x faster than multiprocessing.Queue
   19.7x faster than faster-fifo

================================================================
Sleeping 2 seconds before next test configuration...

Results for 100000 messages of 64 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                    0.124732      0.00124732                  801717
HyperQ                         0.474716      0.00474716                  210652
faster-fifo                    1.67101       0.0167101                    59843
multiprocessing.Queue          2.20561       0.0220561                    45338
🏆 Fastest: BytesHyperQ with 801,717 items/s
   3.8x faster than HyperQ
   13.4x faster than faster-fifo
   17.7x faster than multiprocessing.Queue

================================================================
Sleeping 2 seconds before next test configuration...

Results for 100000 messages of 128 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                    0.116276      0.00116276                  860024
HyperQ                         0.499545      0.00499545                  200182
multiprocessing.Queue          1.99662       0.0199662                    50084
faster-fifo                    2.65151       0.0265151                    37714
🏆 Fastest: BytesHyperQ with 860,024 items/s
   4.3x faster than HyperQ
   17.2x faster than multiprocessing.Queue
   22.8x faster than faster-fifo

================================================================
Sleeping 2 seconds before next test configuration...

Results for 100000 messages of 256 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                    0.235679      0.00235679                  424305
HyperQ                         0.837711      0.00837711                  119372
multiprocessing.Queue          2.32011       0.0232011                    43101
faster-fifo                    2.68104       0.0268104                    37298
🏆 Fastest: BytesHyperQ with 424,305 items/s
   3.6x faster than HyperQ
   9.8x faster than multiprocessing.Queue
   11.4x faster than faster-fifo

================================================================
Sleeping 2 seconds before next test configuration...

Results for 100000 messages of 512 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                    0.251292      0.00251292                  397943
HyperQ                         0.770943      0.00770943                  129711
multiprocessing.Queue          2.08766       0.0208766                    47900
faster-fifo                    2.16858       0.0216858                    46113
🏆 Fastest: BytesHyperQ with 397,943 items/s
   3.1x faster than HyperQ
   8.3x faster than multiprocessing.Queue
   8.6x faster than faster-fifo

================================================================
Sleeping 2 seconds before next test configuration...

Results for 100000 messages of 1024 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                    0.209373      0.00209373                  477616
HyperQ                         0.664122      0.00664122                  150574
multiprocessing.Queue          2.28728       0.0228728                    43720
faster-fifo                    2.30807       0.0230807                    43326
🏆 Fastest: BytesHyperQ with 477,616 items/s
   3.2x faster than HyperQ
   10.9x faster than multiprocessing.Queue
   11.0x faster than faster-fifo

================================================================
Sleeping 2 seconds before next test configuration...

Results for 100000 messages of 4096 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                    0.419936      0.00419936                  238131
HyperQ                         1.0191        0.010191                     98126
multiprocessing.Queue          2.18819       0.0218819                    45699
faster-fifo                    3.13527       0.0313527                    31895
🏆 Fastest: BytesHyperQ with 238,131 items/s
   2.4x faster than HyperQ
   5.2x faster than multiprocessing.Queue
   7.5x faster than faster-fifo

================================================================
Sleeping 2 seconds before next test configuration...

Results for 100000 messages of 8192 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                    0.701695      0.00701695                  142512
HyperQ                         1.34373       0.0134373                    74419
multiprocessing.Queue          2.95495       0.0295495                    33841
faster-fifo                    3.40265       0.0340265                    29388
🏆 Fastest: BytesHyperQ with 142,512 items/s
   1.9x faster than HyperQ
   4.2x faster than multiprocessing.Queue
   4.8x faster than faster-fifo

================================================================
Sleeping 2 seconds before next test configuration...

Results for 100000 messages of 16384 bytes:
Queue Type               Total Time (s)    Latency (ms)    Throughput (items/s)
---------------------  ----------------  --------------  ----------------------
BytesHyperQ                     1.22369       0.0122369                   81720
HyperQ                          1.62568       0.0162568                   61512
faster-fifo                     3.81159       0.0381159                   26235
multiprocessing.Queue           5.12029       0.0512029                   19530
🏆 Fastest: BytesHyperQ with 81,720 items/s
   1.3x faster than HyperQ
   3.1x faster than faster-fifo
   4.2x faster than multiprocessing.Queue

Results may vary depending on hardware and system configuration.

🔧 API Reference

HyperQ

class HyperQ:
    def __init__(self, capacity: int, name: str = None)

    def put(self, item) -> bool
    def get(self)  # Blocks until data is available
    def empty(self) -> bool
    def full(self) -> bool
    def size(self) -> int
    def clear(self)

BytesHyperQ

class BytesHyperQ:
    def __init__(self, capacity: int, name: str = None)

    def put(self, data: bytes) -> bool
    def get(self) -> bytes  # Blocks until data is available
    def empty(self) -> bool
    def full(self) -> bool
    def size(self) -> int
    def clear(self)

Parameters

  • capacity: Maximum size of the queue in bytes
  • name: Optional name for the shared memory segment (max 28 characters)

Important Notes

  • Blocking operations: get() blocks indefinitely until data is available
  • No timeout support: Currently no timeout functionality is implemented
  • Queue names: Must be 28 characters or less
  • Platform limitation: Only works on Unix-like systems (Linux/macOS)

🧪 Running Tests

# Run all tests
pytest

# Run with coverage
pytest --cov=hyperq

📈 Running Benchmarks

# 1 producer, 1 consumer benchmark
python benchmarks/benchmark_bytes_transfering_1p_1c.py

# 10 producers, 10 consumers benchmark
python benchmarks/benchmark_bytes_transfering_10p_10c.py

🏗️ Building from Source

Prerequisites

  • Python 3.10+
  • Cython >= 0.29.0
  • C++ compiler with C++20 support (GCC 8+, Clang 10+)
  • Unix-like system (Linux or macOS)

Build Steps

# Clone the repository
git clone https://github.com/martinmkhitaryan/hyperq.git
cd hyperq

# Install build dependencies
pip install -e ".[test]"

# Build the extension
python setup.py build_ext --inplace

🤝 Contributing

Development Setup

  1. Fork the repository
  2. Create a virtual environment: python -m venv .venv
  3. Activate it: source .venv/bin/activate (Linux/macOS)
  4. Install development dependencies: pip install -e ".[test]"
  5. Run tests: pytest
  6. Make your changes and submit a pull request

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Built with Cython for high-performance Python extensions
  • Uses POSIX shared memory and threading primitives
  • Inspired by the need for faster inter-process communication in Python

📞 Support

🔄 Version History

  • 0.0.7: Replaced is_creator logic with ref count logic for better shared memory management; identified and documented issue with multiprocessing spawn start method not working properly with multiple consumers and producers
  • 0.0.6: Fix cibuildwheel configurations.
  • 0.0.5: Added platform-specific build and skip patterns for Linux and macOS; improved cibuildwheel configuration with separate build targets for manylinux and macosx wheels
  • 0.0.4: Fixed cibuildwheel configuration for proper multi-platform wheel builds; added architecture-specific settings for Linux (x86_64/i686) and macOS (x86_64/arm64);
  • 0.0.3: Fixed cibuildwheel configuration for proper linux wheel build;
  • 0.0.2: Added proper PyPI wheel support for Linux and macOS using cibuildwheel; improved release workflow for multi-platform builds and C++20 compatibility
  • 0.0.1: Initial release with HyperQ and BytesHyperQ implementations

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hyperq-0.0.7.tar.gz (103.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

hyperq-0.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (179.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

hyperq-0.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (184.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

hyperq-0.0.7-cp312-cp312-macosx_11_0_arm64.whl (137.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

hyperq-0.0.7-cp312-cp312-macosx_10_9_x86_64.whl (138.9 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

hyperq-0.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (178.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

hyperq-0.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (184.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

hyperq-0.0.7-cp311-cp311-macosx_11_0_arm64.whl (136.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

hyperq-0.0.7-cp311-cp311-macosx_10_9_x86_64.whl (137.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

hyperq-0.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (179.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

hyperq-0.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (184.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

hyperq-0.0.7-cp310-cp310-macosx_11_0_arm64.whl (135.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

hyperq-0.0.7-cp310-cp310-macosx_10_9_x86_64.whl (137.0 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file hyperq-0.0.7.tar.gz.

File metadata

  • Download URL: hyperq-0.0.7.tar.gz
  • Upload date:
  • Size: 103.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for hyperq-0.0.7.tar.gz
Algorithm Hash digest
SHA256 9b4f290d04d1bc1c15998536885c05cba7573cc78fb386134be2d9e52a1d323d
MD5 6218050c3802413c509dce83b0de05bf
BLAKE2b-256 cd6af11bd413cf83eb4a7bd22132f631d5f0d5ff71342b19547f1f0856d996c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7.tar.gz:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 799be14760e5891e437250f5fa4140bc4295f2c87a93c271474a108d7700dc29
MD5 f2437a2d0453b4d32265cc030356f508
BLAKE2b-256 ef79d788f988d77377536f49e1f0d52f1321198151106df0aca5e748a393650b

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d046ae31936baa5d5f351a10d8064b2357ac612f8967719f1ece04e224e5ed18
MD5 0b766a4094976ae7f445fc2f605891fd
BLAKE2b-256 4465b052b318f601f94c27a13134e232f3f6590e736e172ccaa7d40c692d6eb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ef8d6f839aa1247d59571d071210b2a5c304d94134ec25f29d91ff09b937c200
MD5 125d5ce110dc792a905b5321b4b2e40d
BLAKE2b-256 5afc4709778771801c138c3857bbd76025f271955253710989579d669c89139d

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c474079e357d4dea88dd0db66c78f1c20344c17f8000501a20ceca293b3a4451
MD5 b41bbb28e5f44608b21294cf826f406e
BLAKE2b-256 49cf85e36f12dd7c8ea21584360802b0fa635b1c6adcb3ecb52c4141527fe66d

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp312-cp312-macosx_10_9_x86_64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12a132b79a0be3496841842fca9aac3dc9f6b26ef12d5fc1ba5c3f05bc0ce149
MD5 6f3669a00464e90b801899c013ec1df7
BLAKE2b-256 1cd0f0ee2f1081d1e8f6703259dc0899aea3bd5077f2b45f7fe012c386fb88d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6954e21e530aa163e12e9ccc307f69285368e6c71bac810dcdd0dbdf7a88d4f0
MD5 23553226b348b6002a596c930786a9e8
BLAKE2b-256 67c51f8efef94d13d0b6f6e1917672afa571753fe0142c59065cc57908095a8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 49f6b29bccbb114ab6d5fec87bdb32aba9e781eadab237591bc12fb42b2c3714
MD5 ca833efe894e32973bf3332de2fca6be
BLAKE2b-256 703b6ff51987f1c7ac07133f2dab0903b9895200d2e0e82a26b6bdecbfecd29a

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 be2943b62391a98b0a76092b2d1903f1efe9d06c6e325c9dc7da4f3688706fed
MD5 201b2b3ad9516f343800075d6ea6ec8a
BLAKE2b-256 8a50ed4f47f60d2d5689df9b0a72f1691c75a46f0ed819217533da26f151319b

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c092d2c4a7828de647eeb40be11c56b059baabd66c7778691910050c1511265a
MD5 4ade0872e9736e55f9a63e759886f0b1
BLAKE2b-256 6d4c5fabc03a81f488ae5a1f9a55364c03593ae00cc9caf07657397170b8e77d

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9150caf9494e45a36fcc73afc957aa906f3a75e21be3da616a5170170223da05
MD5 f5bd5c99741f44a4f9e0f6b3a5e0a6c8
BLAKE2b-256 08c3c5227d2db53e10f7238e27b3760965f156b52823ceb83b74ed6790ce3743

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2421b700a1ec696b1fee4b2fa974165b422ab9db412b979c122674692999cfea
MD5 be86987cb05291e367592e717ff66602
BLAKE2b-256 d12c2d014d83841231faa0768339d3f7d2d6ea327b236a730a7272d134dc9f06

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperq-0.0.7-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for hyperq-0.0.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e2f5e3549ab9cf71fca0c0f735ea3d1c4c9aa4cac0951b694e8662feccacf2f6
MD5 807ff744f959aa29ef45eee1ecc9b870
BLAKE2b-256 8580817aa3ddd98438af3c79fbf9814e28d2235a9a5beaeb4785cdcf93b5c3e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperq-0.0.7-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: release.yml on martinmkhitaryan/hyperq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page