Skip to main content

๐ŸŒ€ Faster ModernGL Buffer inter process data transfers

Project description

[!IMPORTANT] Also check out ShaderFlow, where TurboPipe shines! ๐Ÿ˜‰

TurboPipe


Faster ModernGL inter-process data transfers

๐Ÿ”ฅ Description

TurboPipe speeds up sending raw bytes from moderngl.Buffer objects primarily to FFmpeg subprocess

The optimizations involved are:

  • Zero-copy: Avoid unnecessary memory copies or allocation (intermediate buffer.read())
  • C++: The core of TurboPipe is written in C++ for speed, efficiency and low-level control
  • Chunks: Write in chunks of 4096 bytes (RAM page size), so the hardware is happy
  • Threaded:
    • Doesn't block Python code execution, allows to render next frame
    • Decouples the main thread from the I/O thread for performance

โœ… Don't worry, there's proper safety in place. TurboPipe will block Python if a memory address is already queued for writing, and guarantees order of writes per file-descriptor. Just call .sync() when done ๐Ÿ˜‰


๐Ÿ“ฆ Installation

It couldn't be easier! Just install the turbopipe package from PyPI:

# With pip (https://pip.pypa.io/)
python -m pip install turbopipe

# With Poetry (https://python-poetry.org/)
poetry add turbopipe

# With PDM (https://pdm-project.org/en/latest/)
pdm add turbopipe

# With Rye (https://rye.astral.sh/)
rye add turbopipe

๐Ÿš€ Usage

See also the Examples folder for more controlled usage, and ShaderFlow usage of it!

import subprocess

import moderngl
import turbopipe

# Create ModernGL objects
ctx = moderngl.create_standalone_context()
buffer = ctx.buffer(reserve=1920*1080*3)

# Make sure resolution, pixel format matches!
ffmpeg = subprocess.Popen(
    'ffmpeg -f rawvideo -pix_fmt rgb24 -r 60 -s 1920x1080 -i - -f null -'.split(),
    stdin=subprocess.PIPE
)

# Rendering loop of yours (eg. 1m footage)
for _ in range(60 * 60):
    turbopipe.pipe(buffer, ffmpeg.stdin.fileno())

# Finalize writing
turbopipe.sync()
ffmpeg.stdin.close()
ffmpeg.wait()

โญ๏ธ Benchmarks

[!NOTE] The tests conditions are as follows:

  • The tests are the average of 3 runs to ensure consistency, with 5 GB of the same data being piped
  • These aren't tests of render speed; but rather the throughput speed of GPU -> CPU -> RAM -> IPC
  • All resolutions are wide-screen (16:9) and have 3 components (RGB) with 3 bytes per pixel (SDR)
  • The data is a random noise per-buffer between 128-135. So, multi-buffers runs are a noise video
  • Multi-buffer cycles through a list of buffer (eg. 1, 2, 3, 1, 2, 3... for 3-buffers)
  • All FFmpeg outputs are scrapped with -f null - to avoid any disk I/O bottlenecks
  • The gain column is the percentage increase over the standard method
  • When x264 is Null, no encoding took place (passthrough)
  • The test cases emoji signifies:
    • ๐Ÿข: Standard ffmpeg.stdin.write(buffer.read()) on just the main thread, pure Python
    • ๐Ÿš€: Threaded ffmpeg.stdin.write(buffer.read()) with a queue (similar to turbopipe)
    • ๐ŸŒ€: The magic of turbopipe.pipe(buffer, ffmpeg.stdin.fileno())

Also see benchmark.py for the implementation

โœ… Check out benchmarks in a couple of systems below:

๐Ÿ“ฆ TurboPipe v1.0.4:

Desktop โ€ข (AMD Ryzen 9 5900x) โ€ข (NVIDIA RTX 3060 12 GB) โ€ข (DDR4 2x32 GB 3200 MT/s) โ€ข (Arch Linux)

Note: I have noted inconsistency across tests, specially at lower resolutions. Some 720p runs might peak at 2900 fps and stay there, while others are limited by 1750 fps. I'm not sure if it's the Linux EEVDF scheduler, or CPU Topology that causes this. Nevertheless, results are stable on Windows 11 on the same machine.

720p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 882 fps 2.44 GB/s
๐Ÿš€ Null 1 793 fps 2.19 GB/s -10.04%
๐ŸŒ€ Null 1 1911 fps 5.28 GB/s 116.70%
๐Ÿข Null 4 880 fps 2.43 GB/s
๐Ÿš€ Null 4 924 fps 2.56 GB/s 5.05%
๐ŸŒ€ Null 4 2037 fps 5.63 GB/s 131.59%
๐Ÿข ultrafast 4 714 fps 1.98 GB/s
๐Ÿš€ ultrafast 4 670 fps 1.85 GB/s -6.10%
๐ŸŒ€ ultrafast 4 1093 fps 3.02 GB/s 53.13%
๐Ÿข slow 4 206 fps 0.57 GB/s
๐Ÿš€ slow 4 208 fps 0.58 GB/s 1.37%
๐ŸŒ€ slow 4 214 fps 0.59 GB/s 3.93%
1080p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 410 fps 2.55 GB/s
๐Ÿš€ Null 1 399 fps 2.48 GB/s -2.60%
๐ŸŒ€ Null 1 794 fps 4.94 GB/s 93.80%
๐Ÿข Null 4 390 fps 2.43 GB/s
๐Ÿš€ Null 4 391 fps 2.43 GB/s 0.26%
๐ŸŒ€ Null 4 756 fps 4.71 GB/s 94.01%
๐Ÿข ultrafast 4 277 fps 1.73 GB/s
๐Ÿš€ ultrafast 4 270 fps 1.68 GB/s -2.40%
๐ŸŒ€ ultrafast 4 402 fps 2.50 GB/s 45.32%
๐Ÿข slow 4 115 fps 0.72 GB/s
๐Ÿš€ slow 4 118 fps 0.74 GB/s 3.40%
๐ŸŒ€ slow 4 119 fps 0.75 GB/s 4.34%
1440p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 210 fps 2.33 GB/s
๐Ÿš€ Null 1 239 fps 2.64 GB/s 13.84%
๐ŸŒ€ Null 1 534 fps 5.91 GB/s 154.32%
๐Ÿข Null 4 233 fps 2.58 GB/s
๐Ÿš€ Null 4 232 fps 2.57 GB/s -0.08%
๐ŸŒ€ Null 4 495 fps 5.48 GB/s 112.64%
๐Ÿข ultrafast 4 141 fps 1.56 GB/s
๐Ÿš€ ultrafast 4 150 fps 1.67 GB/s 6.92%
๐ŸŒ€ ultrafast 4 226 fps 2.50 GB/s 60.37%
๐Ÿข slow 4 72 fps 0.80 GB/s
๐Ÿš€ slow 4 71 fps 0.79 GB/s -0.70%
๐ŸŒ€ slow 4 75 fps 0.83 GB/s 4.60%
2160p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 81 fps 2.03 GB/s
๐Ÿš€ Null 1 107 fps 2.67 GB/s 32.26%
๐ŸŒ€ Null 1 213 fps 5.31 GB/s 163.47%
๐Ÿข Null 4 87 fps 2.18 GB/s
๐Ÿš€ Null 4 109 fps 2.72 GB/s 25.43%
๐ŸŒ€ Null 4 212 fps 5.28 GB/s 143.72%
๐Ÿข ultrafast 4 59 fps 1.48 GB/s
๐Ÿš€ ultrafast 4 67 fps 1.68 GB/s 14.46%
๐ŸŒ€ ultrafast 4 95 fps 2.39 GB/s 62.66%
๐Ÿข slow 4 37 fps 0.94 GB/s
๐Ÿš€ slow 4 43 fps 1.07 GB/s 16.22%
๐ŸŒ€ slow 4 44 fps 1.11 GB/s 20.65%
Desktop โ€ข (AMD Ryzen 9 5900x) โ€ข (NVIDIA RTX 3060 12 GB) โ€ข (DDR4 2x32 GB 3200 MT/s) โ€ข (Windows 11)
720p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 981 fps 2.71 GB/s
๐Ÿš€ Null 1 1145 fps 3.17 GB/s 16.74%
๐ŸŒ€ Null 1 1504 fps 4.16 GB/s 53.38%
๐Ÿข Null 4 997 fps 2.76 GB/s
๐Ÿš€ Null 4 1117 fps 3.09 GB/s 12.08%
๐ŸŒ€ Null 4 1467 fps 4.06 GB/s 47.14%
๐Ÿข ultrafast 4 601 fps 1.66 GB/s
๐Ÿš€ ultrafast 4 616 fps 1.70 GB/s 2.57%
๐ŸŒ€ ultrafast 4 721 fps 1.99 GB/s 20.04%
๐Ÿข slow 4 206 fps 0.57 GB/s
๐Ÿš€ slow 4 206 fps 0.57 GB/s 0.39%
๐ŸŒ€ slow 4 206 fps 0.57 GB/s 0.13%
1080p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 451 fps 2.81 GB/s
๐Ÿš€ Null 1 542 fps 3.38 GB/s 20.31%
๐ŸŒ€ Null 1 711 fps 4.43 GB/s 57.86%
๐Ÿข Null 4 449 fps 2.79 GB/s
๐Ÿš€ Null 4 518 fps 3.23 GB/s 15.48%
๐ŸŒ€ Null 4 614 fps 3.82 GB/s 36.83%
๐Ÿข ultrafast 4 262 fps 1.64 GB/s
๐Ÿš€ ultrafast 4 266 fps 1.66 GB/s 1.57%
๐ŸŒ€ ultrafast 4 319 fps 1.99 GB/s 21.88%
๐Ÿข slow 4 119 fps 0.74 GB/s
๐Ÿš€ slow 4 121 fps 0.76 GB/s 2.46%
๐ŸŒ€ slow 4 121 fps 0.75 GB/s 1.90%
1440p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 266 fps 2.95 GB/s
๐Ÿš€ Null 1 308 fps 3.41 GB/s 15.87%
๐ŸŒ€ Null 1 402 fps 4.45 GB/s 51.22%
๐Ÿข Null 4 276 fps 3.06 GB/s
๐Ÿš€ Null 4 307 fps 3.40 GB/s 11.32%
๐ŸŒ€ Null 4 427 fps 4.73 GB/s 54.86%
๐Ÿข ultrafast 4 152 fps 1.68 GB/s
๐Ÿš€ ultrafast 4 156 fps 1.73 GB/s 3.02%
๐ŸŒ€ ultrafast 4 181 fps 2.01 GB/s 19.36%
๐Ÿข slow 4 77 fps 0.86 GB/s
๐Ÿš€ slow 4 79 fps 0.88 GB/s 3.27%
๐ŸŒ€ slow 4 80 fps 0.89 GB/s 4.86%
2160p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 134 fps 3.35 GB/s
๐Ÿš€ Null 1 152 fps 3.81 GB/s 14.15%
๐ŸŒ€ Null 1 221 fps 5.52 GB/s 65.44%
๐Ÿข Null 4 135 fps 3.36 GB/s
๐Ÿš€ Null 4 151 fps 3.76 GB/s 11.89%
๐ŸŒ€ Null 4 220 fps 5.49 GB/s 63.34%
๐Ÿข ultrafast 4 66 fps 1.65 GB/s
๐Ÿš€ ultrafast 4 70 fps 1.75 GB/s 6.44%
๐ŸŒ€ ultrafast 4 82 fps 2.04 GB/s 24.31%
๐Ÿข slow 4 40 fps 1.01 GB/s
๐Ÿš€ slow 4 43 fps 1.09 GB/s 9.54%
๐ŸŒ€ slow 4 44 fps 1.10 GB/s 10.15%
Laptop โ€ข (Intel Core i7 11800H) โ€ข (NVIDIA RTX 3070) โ€ข (DDR4 2x16 GB 3200 MT/s) โ€ข (Windows 11)

Note: Must select NVIDIA GPU on their Control Panel instead of Intel iGPU

720p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 786 fps 2.17 GB/s
๐Ÿš€ Null 1 903 fps 2.50 GB/s 14.91%
๐ŸŒ€ Null 1 1366 fps 3.78 GB/s 73.90%
๐Ÿข Null 4 739 fps 2.04 GB/s
๐Ÿš€ Null 4 855 fps 2.37 GB/s 15.78%
๐ŸŒ€ Null 4 1240 fps 3.43 GB/s 67.91%
๐Ÿข ultrafast 4 484 fps 1.34 GB/s
๐Ÿš€ ultrafast 4 503 fps 1.39 GB/s 4.10%
๐ŸŒ€ ultrafast 4 577 fps 1.60 GB/s 19.37%
๐Ÿข slow 4 143 fps 0.40 GB/s
๐Ÿš€ slow 4 145 fps 0.40 GB/s 1.78%
๐ŸŒ€ slow 4 151 fps 0.42 GB/s 5.76%
1080p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 358 fps 2.23 GB/s
๐Ÿš€ Null 1 427 fps 2.66 GB/s 19.45%
๐ŸŒ€ Null 1 566 fps 3.53 GB/s 58.31%
๐Ÿข Null 4 343 fps 2.14 GB/s
๐Ÿš€ Null 4 404 fps 2.51 GB/s 17.86%
๐ŸŒ€ Null 4 465 fps 2.89 GB/s 35.62%
๐Ÿข ultrafast 4 191 fps 1.19 GB/s
๐Ÿš€ ultrafast 4 207 fps 1.29 GB/s 8.89%
๐ŸŒ€ ultrafast 4 234 fps 1.46 GB/s 22.77%
๐Ÿข slow 4 62 fps 0.39 GB/s
๐Ÿš€ slow 4 67 fps 0.42 GB/s 8.40%
๐ŸŒ€ slow 4 74 fps 0.47 GB/s 20.89%
1440p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 180 fps 1.99 GB/s
๐Ÿš€ Null 1 216 fps 2.40 GB/s 20.34%
๐ŸŒ€ Null 1 264 fps 2.92 GB/s 46.74%
๐Ÿข Null 4 178 fps 1.97 GB/s
๐Ÿš€ Null 4 211 fps 2.34 GB/s 19.07%
๐ŸŒ€ Null 4 250 fps 2.77 GB/s 40.48%
๐Ÿข ultrafast 4 98 fps 1.09 GB/s
๐Ÿš€ ultrafast 4 110 fps 1.23 GB/s 13.18%
๐ŸŒ€ ultrafast 4 121 fps 1.35 GB/s 24.15%
๐Ÿข slow 4 40 fps 0.45 GB/s
๐Ÿš€ slow 4 41 fps 0.46 GB/s 4.90%
๐ŸŒ€ slow 4 43 fps 0.48 GB/s 7.89%
2160p x264 Buffers Framerate Bandwidth Gain
๐Ÿข Null 1 79 fps 1.98 GB/s
๐Ÿš€ Null 1 95 fps 2.37 GB/s 20.52%
๐ŸŒ€ Null 1 104 fps 2.60 GB/s 32.15%
๐Ÿข Null 4 80 fps 2.00 GB/s
๐Ÿš€ Null 4 94 fps 2.35 GB/s 17.82%
๐ŸŒ€ Null 4 108 fps 2.70 GB/s 35.40%
๐Ÿข ultrafast 4 41 fps 1.04 GB/s
๐Ÿš€ ultrafast 4 48 fps 1.20 GB/s 17.67%
๐ŸŒ€ ultrafast 4 52 fps 1.30 GB/s 27.49%
๐Ÿข slow 4 17 fps 0.43 GB/s
๐Ÿš€ slow 4 19 fps 0.48 GB/s 13.16%
๐ŸŒ€ slow 4 19 fps 0.48 GB/s 13.78%

๐ŸŒ€ Conclusion

TurboPipe significantly increases the feeding speed of FFmpeg with data, especially at higher resolutions. However, if there's few CPU compute available, or the video is too hard to encode (/slow preset), the gains are insignificant over the other methods (bottleneck). Multi-buffering didn't prove to have an advantage, debugging shows that TurboPipe C++ is often starved of data to write (as the file stream is buffered on the OS most likely), and the context switching, or cache misses, might be the cause of the slowdown.

The theory supports the threaded method being faster, as writing to a file descriptor is a blocking operation for python, but a syscall under the hood, that doesn't necessarily lock the GIL, just the thread. TurboPipe speeds that even further by avoiding an unecessary copy of the buffer data, and writing directly to the file descriptor on a C++ thread. Linux shows a better performance than Windows in the same system after the optimizations, but Windows wins on the standard method.

Interestingly, due either Linux's scheduler on AMD Ryzen CPUs, or their operating philosophy, it was experimentally seen that Ryzen's frenetic thread switching degrades a bit the single thread performance, which can be "fixed" with prepending the command with taskset --cpu 0,2 (not recommended at all), comparatively speaking to Windows performance on the same system (Linux ๐Ÿš€ = Windows ๐Ÿข). This can also be due the topology of tested CPUs having more than one Core Complex Die (CCD). Intel CPUs seem to stick to the same thread for longer, which makes the Python threaded method often slightly faster.

Personal experience

On realistically loads, like ShaderFlow's default lightweight shader export, TurboPipe increases rendering speed from 1080p260 to 1080p360 on my system, with mid 80% CPU usage than low 60%s. For DepthFlow's default depth video export, no gains are seen, as the CPU is almost saturated encoding at 1080p130.


๐Ÿ“š Future work

  • Add support for NumPy arrays, memoryviews, and byte-like objects
  • Disable/investigate performance degradation on Windows iGPUs
  • Improve the thread synchronization and/or use a ThreadPool
  • Stabler way for finding mglo struct offsets (moderngl.h?)
  • Maybe use mmap instead of chunks writing on Linux
  • Test on MacOS ๐Ÿ™ˆ

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

turbopipe-1.0.5.tar.gz (103.7 kB view details)

Uploaded Source

Built Distributions

turbopipe-1.0.5-cp312-cp312-win_amd64.whl (24.2 kB view details)

Uploaded CPython 3.12 Windows x86-64

turbopipe-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (35.2 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

turbopipe-1.0.5-cp312-cp312-macosx_11_0_arm64.whl (31.8 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

turbopipe-1.0.5-cp311-cp311-win_amd64.whl (24.2 kB view details)

Uploaded CPython 3.11 Windows x86-64

turbopipe-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (35.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

turbopipe-1.0.5-cp311-cp311-macosx_11_0_arm64.whl (31.8 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

turbopipe-1.0.5-cp310-cp310-win_amd64.whl (24.2 kB view details)

Uploaded CPython 3.10 Windows x86-64

turbopipe-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (35.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

turbopipe-1.0.5-cp310-cp310-macosx_11_0_arm64.whl (31.8 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

turbopipe-1.0.5-cp39-cp39-win_amd64.whl (24.2 kB view details)

Uploaded CPython 3.9 Windows x86-64

turbopipe-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (35.2 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

turbopipe-1.0.5-cp39-cp39-macosx_11_0_arm64.whl (31.8 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

turbopipe-1.0.5-cp38-cp38-win_amd64.whl (24.2 kB view details)

Uploaded CPython 3.8 Windows x86-64

turbopipe-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.7 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

turbopipe-1.0.5-cp38-cp38-macosx_11_0_arm64.whl (31.9 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

turbopipe-1.0.5-cp37-cp37m-win_amd64.whl (24.2 kB view details)

Uploaded CPython 3.7m Windows x86-64

turbopipe-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.7 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

File details

Details for the file turbopipe-1.0.5.tar.gz.

File metadata

  • Download URL: turbopipe-1.0.5.tar.gz
  • Upload date:
  • Size: 103.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for turbopipe-1.0.5.tar.gz
Algorithm Hash digest
SHA256 d11d7bd91ae1d8e31a61e8807f2b917a28a7082df9bde082c4d3bf1ebf671569
MD5 a416d57119ebfd07678f35c391d6e87a
BLAKE2b-256 7900fec80d52601327a7dbd713d9b25debd3d0bea28fc2366cfac77f409987ed

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ca5e5108c503ac1fc57987bee5c40fc0f453a6f42baff38dd80f4739728c98ba
MD5 a1e720d9983ee3446315d566e0e50693
BLAKE2b-256 20e3dd2578f5e96deab67e98cf6260d1638c7012ebf3fda4abade5f675ac9e9f

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7d23756690bfc39a3c0b30123c7cbc55dcfebd56db247d2ce9db75007ceda73e
MD5 aaa42f8a1962b84668776a320b05c83a
BLAKE2b-256 96c8ceaeacc3cf36130ff17854ec9bd01e87721208ec4e7ef4bdb34a0d083109

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eda668415ecf2727786565e106ed0f933a3d8aa412fa54e557c44ca0314aaede
MD5 a2ca144fe9c2f727d7ac2947eb6b75f4
BLAKE2b-256 4c0a20de903d968e82a5e40ade94562a30c32df64109108ed945fcca33a702b7

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fcdca0e17e709ccc3fe50b8a2aa97cb85b51113da1e3970f67b1f0fe587be90f
MD5 fe27a4af280d5cc451efc65dbdab95d6
BLAKE2b-256 cbda0cc0ed970bddf9a8ef2d7f2f8541419df888729428d6771efaf3f421653c

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9703f368bcb5835a7c87ad1aa9a08ee6a7bfda53b02fe11b0d5418910075b99f
MD5 5e2c47d9d321fcea2360614edbcd7de3
BLAKE2b-256 88eb90c86f1ad8259e9d17397656216fc22d71bbf505aeb2ca00725531d6e696

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8734248813191f8c8bcbbbc7f78ca6cb8af0ad0b5e0c3953c5ba74bbd0d62083
MD5 4d825913b32d7b3343a76ea9c856eba8
BLAKE2b-256 3b787b90ef743e66d8fa7175a243511cbe4c4a7350ffcf6020a90770ca9028c1

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 876aef8cb99c5bc137fbec78efac5cfba5258f928751f8eeedee0c92e29535fb
MD5 167cfc6f28e394f94299c4c3208409b0
BLAKE2b-256 545d3c6d36263e4a94431e9e896fc0f1789268d451819b875032099e75e0acac

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e2584073cccf6488e82f8f5f301b32e3cc9e669309b8ce98f3145fa88a1eeddf
MD5 81d23b79a340e315595834ab48a799c1
BLAKE2b-256 7ce08c90f64565846b8e0cc3b820326f596bc756421a1dc17b0405083247b5ff

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 326e9fb41ae4fc843108ce7ea9f6a382d7694027ca192d081fdbc052ee8687e2
MD5 be3b7b23f1025ac42c54e296955b1b3f
BLAKE2b-256 b315731194e1e6edf11ea10b80e398ae95fe7671df1893b31e6be1fab30a3e91

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: turbopipe-1.0.5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for turbopipe-1.0.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3675d1d67e91c447d3569afd8b00689add8343dd1c89e0331cd61381ccc20f9d
MD5 9d84137cba15b514469fac9d43588f53
BLAKE2b-256 0676a264cea9fc20cae500dd17555b6d07e489ddf7341cd31a7b4c5abe836062

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3b3e6fb9687017a0424f500777d70632bb52f9d7063003b2cdb776e86c520b7a
MD5 0ed65fe7382d48306511eb2edefc1800
BLAKE2b-256 c831ef234cf74bd2df2ad185493680b381324fda3409a9dc43332085e9925e15

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4340c9e7bf13e9715fd09d9cb6c9a7eb49f02f827a7730333d4cb02a5fbedb65
MD5 05354b95b5e7fc619bc3418143f5bf30
BLAKE2b-256 e08c20eb3d080844f6be792af99edbd676af91ece602c8c6e7a2d18bc1d4a4ff

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: turbopipe-1.0.5-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for turbopipe-1.0.5-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 880e73fd8426e9e82a9cf74f8eee0aa22047f20b19f77176ee2ebcc56704f1ac
MD5 73405c5d923880486fe18cf18a263b39
BLAKE2b-256 5d852ccba28904ddf6d4ed9c2e756d1729dfb289d69c60e8cf0f4beaf1d813b5

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed205358c5b135d284f35e1eab1b4d89d736f7989ef12e23df75617e65dd2b19
MD5 e1d4cfaa98f8b6af2ded1ea782a99320
BLAKE2b-256 6592f4bbc80b044f65647afb36d908d04f62ec3a706d4bcac90608e349b17004

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f494eb5a1b6be02a9065a82fab0a82d6de7a177cc46aea85349feb0971c5949
MD5 601e7d6314babb7d6ad7ba26e47ff2ff
BLAKE2b-256 a9507305b1f3e3a881ce14fc486269845a905bcfb3656bae1c6d882f3388b07f

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: turbopipe-1.0.5-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for turbopipe-1.0.5-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 b1f6e98bfb2e36a47bdc40ae1abbb9a3088e8ce47674b5554a90071025cb2b50
MD5 d4e9cc06c166f67e070908fd23cd502e
BLAKE2b-256 edaaf2c2ee04a2a72bd015ec3ba510ed31481d3c78fe0afbb1787d6641832509

See more details on using hashes here.

File details

Details for the file turbopipe-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7f5a7e84e4b8c7ac7ff885854a37c4c3cfc63175eda1bb568ad82c5ef3596817
MD5 439b8cc9d4c2ba6a4d369c4dec1f5e8f
BLAKE2b-256 222f1f7f62225ae9e707617675a0cfd6546bb0aa673793c618223173d81b1a2f

See more details on using hashes here.

Supported by

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