Skip to main content

slick-stream-buffer-py

A Python implementation of slick-stream-buffer — a lock-free single-producer multi-consumer (SPMC) byte stream buffer with shared memory support.

Maintains exact binary compatibility with the C++ version: a Python producer and a C++ consumer (or vice versa) communicate seamlessly through the same shared memory segment, using the same std::atomic synchronization primitives.

Tracks C++ slick/stream_buffer.hpp v2.0.0 (header magic 'SSB1'); the two carry the same version number. The shared memory format is unchanged from v1.x, so a segment written by an older process is still readable.

Features

  • Byte stream, message records: the producer writes raw bytes (prepare/commit) and publishes them as discrete message records (consume), like a network receive buffer feeding a framing layer
  • Lock-free SPMC: one producer, any number of consumers, no locks anywhere
  • Binary-compatible with C++: identical 64-byte header, 32-byte control records, and acquire/release memory orderings (slick/stream_buffer.hpp, header magic 'SSB1')
  • Never touches a segment it does not own: only the process that actually creates a segment initializes it, and an existing one is validated (magic, geometry, mapped size) before a byte is written
  • Shared memory IPC: built on multiprocessing.shared_memory, matching the C++ slick-shm naming conventions on Windows, Linux, and macOS
  • Lossy by design: slow consumers skip overwritten data instead of blocking the producer, and count it when you ask them to (see Read traits)
  • Local memory mode: same API without shared memory for single-process use
  • No runtime dependencies: Python 3.8+ standard library plus a small bundled C++ extension for the atomics

Requirements

  • Python 3.8+
  • 64-bit platform (Windows x86-64, Linux x86-64/ARM64, macOS x86-64/ARM64)
  • A C++17 compiler to build the ssb_atomic_ops_ext extension (MSVC 2017+, GCC 5+, Clang 3.8+)

Installation

pip install -e .
# or just build the extension in place:
python setup.py build_ext --inplace

Quick Start

Producer (creates the shared memory segment)

from slick_stream_buffer_py import SlickStreamBuffer

# 64 MB data ring, 65536 message records
stream = SlickStreamBuffer(capacity=1 << 26, control_size=1 << 16, name="market_data")

while True:
    mv = stream.prepare(64 * 1024)      # contiguous writable memoryview (zero-copy)
    n = sock.recv_into(mv)              # write network bytes directly into the ring
    stream.commit(n)

    # publish every complete package as one message record
    while (package_size := find_complete_package(stream.data(), stream.size())):
        stream.consume(package_size)

Consumer (opens the existing segment — can be C++ or Python)

from slick_stream_buffer_py import SlickStreamBuffer

stream = SlickStreamBuffer(name="market_data")   # geometry read from the segment header

cursor = stream.initial_reading_index()          # skip history; use 0 to read from the start
while True:
    data, length, cursor = stream.read(cursor)
    if data is None:
        continue
    handle_package(data, length)

Read traits

read() takes a per-call configuration, mirroring the C++ template parameter:

class read_traits:
    detect_reset = True    # resync a cursor that outlived a reset()
    count_loss   = False   # accumulate loss_count()

Ordinary callers write buf.read(cursor) and never name a traits class. Loss counting is opt-in - in C++ it measured ~20% of read() even in a run that lost nothing - so subclass, or use the bundled counting_read_traits, when you need it:

from slick_stream_buffer_py import counting_read_traits

data, length, cursor = stream.read(cursor, counting_read_traits)
print(stream.loss_count())

So loss_count() stays 0 unless you read through traits that ask for it - records are still skipped correctly, only the counter is silent. detect_reset is on by default; turn it off if you never call reset().

ReadTraits / CountingReadTraits are PEP 8 aliases of the same two classes.

Local memory mode (single process)

buf = SlickStreamBuffer(capacity=1024, control_size=16)

mv = buf.prepare(5)
mv[:] = b"hello"
buf.commit(5)
buf.consume(5)                     # publish as one record

data, length, cursor = buf.read(0)  # -> b"hello", 5, 1

C++ Interoperability

The C++ side uses the identical layout — either side can create the segment, the other attaches to it:

#include <slick/stream_buffer.hpp>

slick::stream_buffer stream("market_data");   // open segment created by Python

uint64_t cursor = stream.initial_reading_index();
for (;;) {
    auto [data, length] = stream.read(cursor);
    if (data == nullptr) continue;
    handle_package(data, length);
}

Shared memory naming: use get_shm_name() to obtain the exact name to pass to C++ (on POSIX it includes the leading / that shm_open() requires; on Windows it is the raw name).

Shared-memory lifecycle

Only the process that actually creates a segment initializes it - SharedMemory(create=True) is the OS-backed answer (O_CREAT|O_EXCL on POSIX, ERROR_ALREADY_EXISTS on Windows), so a name that collides with another application's segment is never overwritten. Constructing with a geometry over a live segment attaches to it instead: own_buffer is then False and the existing cursors are left alone.

A crashed creator can leave a segment behind. On POSIX the name survives the process, so:

  • if it died part-way through initialization, the segment is stuck in the INITIALIZING state and every later creator and opener fails construction after a 2-second wait;
  • if it died after initialization, the segment is intact and gets attached with the dead producer's cursors still in it.

Neither is recovered automatically: nothing portable can distinguish a dead creator from a slow one - a PID stamped in the header means nothing across PID namespaces and is unreliable under PID reuse - so taking a segment over is an explicit decision. The wedged-segment error names the step. Call remove() once at startup, when the application knows no other process is using the segment:

SlickStreamBuffer.remove("my_stream")        # clear anything a previous run left
buf = SlickStreamBuffer(capacity=1 << 20, control_size=4096, name="my_stream")

On POSIX remove() unlinks immediately: the next creator gets a fresh segment, while any process still mapped to the old one keeps reading the orphaned copy. On Windows it is a no-op returning True - a section there disappears once the last handle closes.

One Python-only caveat: on POSIX before Python 3.13, multiprocessing's resource tracker unlinks every segment the process mapped when it exits, including ones it only attached to. Python 3.13+ attaches with SharedMemory(track=False), which is why 3.13 or newer is recommended when several processes share a segment. remove() unlinks the segment either way, and retracts the tracker's registration only when this process is the one that registered it - a name registered by some other process, or by a SharedMemory you built yourself, stays that owner's to account for. See API_DIFFERENCES.md.

Shared memory layout

[HEADER: 64 bytes]
  0-7   atomic<uint64> committed_    - monotonic end of committed bytes
  8-15  atomic<uint64> consumed_     - monotonic publish boundary
  16-23 atomic<uint64> next_seq_     - next record sequence number
  24-31 atomic<uint64> reserve_end_  - prepared-region high-water mark
  32-39 uint64 capacity_             - data ring size in bytes (power of 2)
  40-43 uint32 control_size_         - control ring record count (power of 2)
  44-47 uint32 header_magic          - 0x53534231 ('SSB1')
  48-51 atomic<uint32> init_state    - 0=uninit, 2=initializing, 3=ready
  52-63 padding
[CONTROL RING: 32 bytes x control_size]
  each record: atomic<uint64> seq | uint64 offset | uint32 length | 12 bytes padding
[DATA RING: capacity bytes]

Total segment size: 64 + 32 * control_size + capacity.

API Summary

Method Role Description
prepare(n) -> memoryview producer contiguous writable region; may relocate unconsumed bytes on wrap
commit(n) producer move n prepared bytes into the readable region (clamped)
consume(n) -> PublishedRecord producer publish the first n readable bytes as ONE record (clamped)
discard() producer drop unconsumed + prepared bytes without publishing
data() -> memoryview / size() producer the committed-but-unconsumed region
read(cursor, traits=read_traits) -> (data, length, cursor) consumer next record, or (None, 0, cursor); skips lost records
read_last() -> (data, length) consumer newest record without a cursor
initial_reading_index() consumer cursor for a late joiner (skips history)
loss_count() consumer records skipped by this instance, counting only reads made with count_loss traits
reset() owner clear all state (not thread-safe)
close() / unlink() lifecycle detach / delete this instance's segment
SlickStreamBuffer.remove(name) lifecycle unlink a segment by name - the stale-segment recovery step

See API_DIFFERENCES.md for the exact deviations from the C++ API (cursor passed by value, bytes copies vs pointers, exceptions).

Caveats (same as C++)

  • Producer methods (prepare/commit/consume/discard/data/size/reset) must be called from a single thread.
  • The buffer is lossy: if the producer outruns a consumer by more than the control ring or data ring size, the consumer skips ahead. The loss is counted only for reads made with traits whose count_loss is true (see Read traits).
  • prepare() may relocate the readable region: memoryviews previously returned by data() or prepare() are invalidated.
  • A single message (one consume() call) is limited to < 4 GiB: consume() raises ValueError rather than publishing a truncated record length. It raises before touching any state, so the bytes stay readable and can go out as several smaller records.

Building and Testing

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

# 2. Pure-Python tests
python tests/test_atomic_ops.py
python tests/test_local_mode.py
python tests/test_shm_mode.py

# 3. C++ interop tests (requires CMake 3.21+ and a C++20 compiler)
cmake -S . -B build
cmake --build build --config Debug
cd build && ctest -C Debug --output-on-failure

The interop tests fetch slick-stream-buffer (which pulls slick-shm) from GitHub and build real C++ producer/consumer binaries against the actual stream_buffer.hpp. To build against local checkouts instead (no network):

cmake -S . -B build \
  -DFETCHCONTENT_SOURCE_DIR_SLICK-STREAM-BUFFER=/path/to/slick-stream-buffer \
  -DFETCHCONTENT_SOURCE_DIR_SLICK-SHM=/path/to/slick-shm

The 4 GiB record-limit test needs a 4 GiB ring, so it is skipped unless you opt in:

SSB_PY_TEST_4GIB=1 python tests/test_local_mode.py

If a failed test run leaves segments behind: python tests/cleanup_shm.py, or SlickStreamBuffer.remove(name) for one you know by name.

Related Projects

License

MIT

Metadata

Release files for slick-stream-buffer-py 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for slick-stream-buffer-py 2.0.0
File Size Uploaded
slick_stream_buffer_py-2.0.0.tar.gz 43.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for slick-stream-buffer-py 2.0.0
File
slick_stream_buffer_py-2.0.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
slick_stream_buffer_py-2.0.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.5+ x86-64, Linux glibc 2.17+ x86-64 Details
slick_stream_buffer_py-2.0.0-cp313-cp313-macosx_10_13_universal2.whl CPython 3.13 CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64) Details
slick_stream_buffer_py-2.0.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
slick_stream_buffer_py-2.0.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.5+ x86-64, Linux glibc 2.17+ x86-64 Details
slick_stream_buffer_py-2.0.0-cp312-cp312-macosx_10_13_universal2.whl CPython 3.12 CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) Details
slick_stream_buffer_py-2.0.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
slick_stream_buffer_py-2.0.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64, Linux glibc 2.5+ x86-64 Details
slick_stream_buffer_py-2.0.0-cp311-cp311-macosx_10_9_universal2.whl CPython 3.11 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) Details
slick_stream_buffer_py-2.0.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
slick_stream_buffer_py-2.0.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.5+ x86-64 Details
slick_stream_buffer_py-2.0.0-cp310-cp310-macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) Details
slick_stream_buffer_py-2.0.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
slick_stream_buffer_py-2.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64, Linux glibc 2.5+ x86-64 Details
slick_stream_buffer_py-2.0.0-cp39-cp39-macosx_10_9_universal2.whl CPython 3.9 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) Details
slick_stream_buffer_py-2.0.0-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
slick_stream_buffer_py-2.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ x86-64, Linux glibc 2.5+ x86-64 Details
slick_stream_buffer_py-2.0.0-cp38-cp38-macosx_10_9_universal2.whl CPython 3.8 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64) Details

Total release size: 663.0 kB

Release files / slick_stream_buffer_py-2.0.0.tar.gz

Download URL slick_stream_buffer_py-2.0.0.tar.gz
Size 43.6 kB
Tags Source
SHA-256 checksum
How to use checksums
007f941d96ae69ab1a9997bf0b27ef40dbbe7641897afa24d8b9b2594e28cb01
BLAKE2b-256 checksum
How to use checksums
5b6114ea738094a9a29ceba6df99a1485994d84197b071816a4a2f569268a6ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp313-cp313-win_amd64.whl

Download URL slick_stream_buffer_py-2.0.0-cp313-cp313-win_amd64.whl
Size 29.6 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
8c897c63769b7fcc37c12bc52e00821c2692e55949f4fa79277db1822718f6a6
BLAKE2b-256 checksum
How to use checksums
583c07bd3b88a447711f7bf224815bb13cea98991ae37976bd40c0b1a093fd2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL slick_stream_buffer_py-2.0.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 44.6 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
838f85b944570ccce620b996689c6e3d2076e16ec95ab77c839ebeb9470d121a
BLAKE2b-256 checksum
How to use checksums
f03a18dcc65157ef125d229f5ddba003711fed711d1a8d25901dee94a450d091
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp313-cp313-macosx_10_13_universal2.whl

Download URL slick_stream_buffer_py-2.0.0-cp313-cp313-macosx_10_13_universal2.whl
Size 29.0 kB
Tags CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
031ac0f31b938b487fdd697b2ba8eafeea5b20151bcc8b4e54352023e6a89626
BLAKE2b-256 checksum
How to use checksums
3e20fbc2f85cf274c45b135ca0dd33d7a9cfc5c760be315381fd2cfba65c6ae0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp312-cp312-win_amd64.whl

Download URL slick_stream_buffer_py-2.0.0-cp312-cp312-win_amd64.whl
Size 29.6 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
cd2117492e25205296c481047031c4a56374447b1d4aa1e3408f6060480a3aae
BLAKE2b-256 checksum
How to use checksums
36750d226e5c28416e52b17eedc23882fd0abd78b38c5696319fb283f7362c03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL slick_stream_buffer_py-2.0.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 44.6 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
e7fdda1eeaf39d5fa02ab76cb61d19b767f53b5d9de75f7b3def45ea8d63d501
BLAKE2b-256 checksum
How to use checksums
e2ddaad3eae90352b57c46dcac29187dcce00aaabaa418459b02e6bc09e1b2ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp312-cp312-macosx_10_13_universal2.whl

Download URL slick_stream_buffer_py-2.0.0-cp312-cp312-macosx_10_13_universal2.whl
Size 29.0 kB
Tags CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
99f3144cb1259d3f82d30e88ac846061725f18b23dff0024b7247ac5d3e5e04e
BLAKE2b-256 checksum
How to use checksums
d5de7192d734f46334a711edb6af6e09fac97247388617b85a424d25df161ddc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp311-cp311-win_amd64.whl

Download URL slick_stream_buffer_py-2.0.0-cp311-cp311-win_amd64.whl
Size 29.6 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
e8210523c86738a54e171ed37b2e895bb19fddd854f20bc69e88f5959e1d4af4
BLAKE2b-256 checksum
How to use checksums
3de7b156a928b8c0331deb395495a1cb3af2a55d034a0396d3f4e5ff58c8d698
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL slick_stream_buffer_py-2.0.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 44.7 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
1b67b810c094f422209ad629210e023d7d07296ab712b8a7e7778ca6aef7fd9d
BLAKE2b-256 checksum
How to use checksums
67fe12b5001687db01340b0317420fc6b4cc6441eef1981874e7ab0c95c99a8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp311-cp311-macosx_10_9_universal2.whl

Download URL slick_stream_buffer_py-2.0.0-cp311-cp311-macosx_10_9_universal2.whl
Size 29.0 kB
Tags CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
20f5958933eb5e3e5b5b4f59a88892622392f764723f22740abef2b5d9c7c3b3
BLAKE2b-256 checksum
How to use checksums
32df5566dfa3f7592939f3cee220613d84be1c3022077d8dc831c2d3bd2352aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp310-cp310-win_amd64.whl

Download URL slick_stream_buffer_py-2.0.0-cp310-cp310-win_amd64.whl
Size 29.6 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
932d8267c9818f479632dde9436876c89a587eab0eb65443fe9e219a8ec9ab3b
BLAKE2b-256 checksum
How to use checksums
32a01b21d487c6d1b1da30212b2d0789b52d5d0e4a5447a12b389771fcb70c63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL slick_stream_buffer_py-2.0.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 44.7 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
4cb99c489e642b4a0762693a1dd7c469161a80902bcfc4ea10bf3c3acc9838b2
BLAKE2b-256 checksum
How to use checksums
397735c0b04a15c605a0ddd7560ee78981e33171190c5a187e6d40ff9159faee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp310-cp310-macosx_10_9_universal2.whl

Download URL slick_stream_buffer_py-2.0.0-cp310-cp310-macosx_10_9_universal2.whl
Size 29.0 kB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
c154040657fe661b9160add3a9878d00b0d46dc7b895111b045aad8d3e9963e8
BLAKE2b-256 checksum
How to use checksums
55266be14d675f4767ad34d9970f39fbbd3f296666a57d554d8e20b64d86ee61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp39-cp39-win_amd64.whl

Download URL slick_stream_buffer_py-2.0.0-cp39-cp39-win_amd64.whl
Size 29.6 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
30ff73b60aa4d04c3d47e57d66f341ca62a2a16c61cfff7576558b3b8e94c4ac
BLAKE2b-256 checksum
How to use checksums
3b4699bc478e13ca77aae915e2f1c1222bae293edc9755e523cc42922ae8c74a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL slick_stream_buffer_py-2.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 44.4 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
37fa6afecb75229455f03ea0dcaf6a45670de3776b5c0378e80a25dc9c86bf9f
BLAKE2b-256 checksum
How to use checksums
29ca59bb4aff57cde5f093ac8ae8201f0ff2836156d671a3f84e5806a3fc42e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp39-cp39-macosx_10_9_universal2.whl

Download URL slick_stream_buffer_py-2.0.0-cp39-cp39-macosx_10_9_universal2.whl
Size 29.0 kB
Tags CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
c56631ef641107e62f90c2dad3351a48e2599e10c1c8087008afd7c240f4a361
BLAKE2b-256 checksum
How to use checksums
433ef0af771fcd89cbc0719854cdcb7f3f7136863c43732328462d7a956cbbd6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp38-cp38-win_amd64.whl

Download URL slick_stream_buffer_py-2.0.0-cp38-cp38-win_amd64.whl
Size 29.6 kB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
f570111b56f45054e151f15823f81925df07049a477765cb4629ba37338b88e5
BLAKE2b-256 checksum
How to use checksums
885016892b17f27cba40f4e3fff5662b1deedfc0958aa8a5854b8fa60ed0e759
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL slick_stream_buffer_py-2.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 44.8 kB
Tags CPython 3.8 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
84fe588349a17f65909c393d87a49ad9c6c18314b12730700ea0e11f795864d7
BLAKE2b-256 checksum
How to use checksums
3c9cc31c22622cfd8de7605abc979940b03bfb9753c37cf6d0950b91e8ec95c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / slick_stream_buffer_py-2.0.0-cp38-cp38-macosx_10_9_universal2.whl

Download URL slick_stream_buffer_py-2.0.0-cp38-cp38-macosx_10_9_universal2.whl
Size 28.8 kB
Tags CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
ec70f1d8c669295836bc69c78251cdce8e0927c1386a1b219ea29104245ab984
BLAKE2b-256 checksum
How to use checksums
c84b8159c00e758a071f0146eb2de5882a7cd32bfc16c44d16a768214f417588
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

2.0.0 This release

19 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page