Skip to main content

๐ŸŒ€ Faster ModernGL Buffers inter-process data transfers for subprocesses

Project description

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

TurboPipe

Faster ModernGL Buffers inter-process data transfers for subprocesses


๐Ÿ”ฅ 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 (Unix)
  • 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/)
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 comparisons, and ShaderFlow usage of it!

import subprocess

import moderngl
import turbopipe

# Create ModernGL objects
ctx = moderngl.create_standalone_context()
buffers = [ctx.buffer(reserve=1920*1080*3) for _ in range(2)]

# 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 frame in range(60 * 60):
    buffer = buffers[frame % len(buffer)]
    turbopipe.sync(buffer)
    fbo.read_into(buffer)
    turbopipe.pipe(buffer, ffmpeg.stdin.fileno())

# Finalize writing, encoding
ffmpeg.stdin.close()
turbopipe.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 857 fps 2.37 GB/s
๐Ÿš€ Null 4 891 fps 2.47 GB/s 4.05%
๐ŸŒ€ Null 4 2309 fps 6.38 GB/s 169.45%
๐Ÿข 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 269 fps 1.68 GB/s
๐Ÿš€ ultrafast 4 272 fps 1.70 GB/s 1.48%
๐ŸŒ€ ultrafast 4 409 fps 2.55 GB/s 52.29%
๐Ÿข 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 219 fps 2.43 GB/s
๐Ÿš€ Null 4 231 fps 2.56 GB/s 5.64%
๐ŸŒ€ Null 4 503 fps 5.56 GB/s 129.75%
๐Ÿข 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

  • Disable/investigate performance degradation on Windows iGPUs
  • Improve the thread synchronization and/or use a ThreadPool
  • Maybe use mmap instead of chunks writing on Linux

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.2.2.tar.gz (28.9 kB view details)

Uploaded Source

Built Distributions

turbopipe-1.2.2-cp313-cp313-win_amd64.whl (24.6 kB view details)

Uploaded CPython 3.13 Windows x86-64

turbopipe-1.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.0 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.2-cp313-cp313-macosx_11_0_arm64.whl (19.5 kB view details)

Uploaded CPython 3.13 macOS 11.0+ ARM64

turbopipe-1.2.2-cp313-cp313-macosx_10_13_x86_64.whl (20.9 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

turbopipe-1.2.2-cp312-cp312-win_amd64.whl (24.6 kB view details)

Uploaded CPython 3.12 Windows x86-64

turbopipe-1.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.0 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.2-cp312-cp312-macosx_11_0_arm64.whl (19.5 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

turbopipe-1.2.2-cp312-cp312-macosx_10_13_x86_64.whl (20.9 kB view details)

Uploaded CPython 3.12 macOS 10.13+ x86-64

turbopipe-1.2.2-cp311-cp311-win_amd64.whl (24.6 kB view details)

Uploaded CPython 3.11 Windows x86-64

turbopipe-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.2-cp311-cp311-macosx_11_0_arm64.whl (19.5 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

turbopipe-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl (21.1 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

turbopipe-1.2.2-cp310-cp310-win_amd64.whl (24.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

turbopipe-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.2-cp310-cp310-macosx_11_0_arm64.whl (19.5 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

turbopipe-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl (21.1 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

turbopipe-1.2.2-cp39-cp39-win_amd64.whl (24.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

turbopipe-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.2-cp39-cp39-macosx_11_0_arm64.whl (19.5 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

turbopipe-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl (21.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

turbopipe-1.2.2-cp38-cp38-win_amd64.whl (24.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

turbopipe-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.3 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.2-cp38-cp38-macosx_11_0_arm64.whl (19.5 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

turbopipe-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl (21.1 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

turbopipe-1.2.2-cp37-cp37m-win_amd64.whl (24.6 kB view details)

Uploaded CPython 3.7m Windows x86-64

turbopipe-1.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.3 kB view details)

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

turbopipe-1.2.2-cp37-cp37m-macosx_10_9_x86_64.whl (21.1 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for turbopipe-1.2.2.tar.gz
Algorithm Hash digest
SHA256 b89be5f1f3edbe198375d59c2a052ac05762e5c1f7511e1cc13d0c8e48e5a73e
MD5 f74fd49618c0a4bb8b2ba7b5159f8433
BLAKE2b-256 10f5a36b09d63bda15412f6bc697d88f5b6bb7538375c2d88e09c9798f466618

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 65f83bac3ebca33006fddde4121ec1b7e66552cebd4f0b75487b7ee2305ea1f4
MD5 f92492127c0912ad97de1ae2b0142fd9
BLAKE2b-256 5f7d8316fdc498b9dd4d6106aacbc6db3615a9f504c5790d52542d515acc923b

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c063cc9bead5053f59bb930869e621c24c086ef0b6b7cea012d2d0da56f2d755
MD5 93db7006f2da30cd80adedd5833dc959
BLAKE2b-256 da20489d5cc9e7ad4c2bfba67b2967909d26958bf0554d6be4125a7da7b530ac

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 42716e00bdfcecbd0cb69a1d65d4cd3b6c3e4e910b01d94667f7c780c7b1c112
MD5 5ef282317860f785039a1d0f349a2294
BLAKE2b-256 a2e47322ca9147833f4ded792b2e14c1c67b1f916fab2238a04c1d8d5d303fff

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 372d3a4e05ff15df9623e3385625cc4d76b1744c3eedbb16714e46672875f1b8
MD5 42b7eca7214e432d774fc1c73371f978
BLAKE2b-256 d13bf11d78060aa67721ff5fe4bd975d1f22f3ad6256889e4d74a2d0d4b925ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d025306471592ab30098fc78c2f2a1e18cfa86e3311432b51669c28dafb1cf5e
MD5 abf58ffbf22cefbf43c2ded12b78c480
BLAKE2b-256 f319e1120a0584fadeb65c6ebd6795572190493955901e0bb1ab53a29200ea18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 521ecf88fde3480d619fdaf3ea004bfd7a6f561602e066e92a5a79167e56e285
MD5 870022f5209a62b3b8dc8c4790a7ca3c
BLAKE2b-256 9d273930c298c172902ffbffb644695f58f81ea8080a85f69d7a5fad901b465f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0ee8de5f8aea81645c0306b64af4d0437e7359bda7544e8a34d4a0e6e76add06
MD5 6e2e4c63fdccd16dd86d4b5a0a8bb69b
BLAKE2b-256 cac7578855418e45ad1dfd3dc1ca65b07cd715c289f49045b67bf9830cd78c90

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 94894b2bd89db2aef7e8abbdd80a3191fd2c8a677bba2626fce3dbfee8b4f594
MD5 eaa0bc2ea97ed21ed88ffd238cd4f01f
BLAKE2b-256 714bca886b8f9b0625991a7f8ab0acd9b761853ee67511d429f87def0672c893

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 337486dbd4800045e5dfdbcaa7a0a560cb54e44cb7e46f79d7e96d7a1f9447e7
MD5 b5d8470d9eb9597e55492e9213e98f39
BLAKE2b-256 5bc3a6dfdacaaa36f8e936743da21ad292b2f0e1e6a72017ea754f21ae810095

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 78ad38f010f2909d914e9de094dd128fbceb088c118499d35e4c6b9ba1483266
MD5 f8b51ab75fdbac285c253ecd68c94ded
BLAKE2b-256 1e9b923e02bc6b59bc6edac4cbcd3f4ce1665bf0abb3e9841462b3a12070135f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6433485eee3e22d45b8d90c44b7123ec898eb1bc9a7d7762e190e6d1dafb8a8d
MD5 dfcb744810263e65934e4fd3dd7075c5
BLAKE2b-256 154d1d319e10de6e792b8b8776318489cd017af68571ef24f467a707d957fe08

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 886c902a610b984c3f658145b6e141dfffc4b017966580a74572f193b36517fb
MD5 13588dd73d7f3bf7d819f45b6932235d
BLAKE2b-256 b758ff18c2bd5ba84ebc789531cf63174f95753cf0ad557a0c745058c9c5146c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 098bd5782a4dff15f05d98bb969db8c7d2de25d2583bba0b954ca096ee884f7f
MD5 623f52d9b8d6fb0cc8627c046fec06e7
BLAKE2b-256 52bb0a209af66fa79b490db1fc81e3649ff5ef482053250353c63a6f71d5841c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 865b8ea1e200c2b0f5ae0f85c3275da26ad34c5ddb4b8f9a533e3889a8e4a1ec
MD5 9cd03ab4649a8635363eec3ef4b40dbc
BLAKE2b-256 fe196911e37c149394081720886199b8ef7b0d56e3fcd49d66c030201b0efd95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 392d160196d88c84ea8a2bb3fddce05ac9d698329f01ce90b121de7db0715263
MD5 d9ce2370d6cf201de987e7e9a278084b
BLAKE2b-256 ea69b1f602e92e6a8c6b7bcbcb25c63975ea9aa473cd0735afcd430703929b3a

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 39c2a0bbb3983baa6a501a264436702e5e15ca4bd45e4cc8b004c1f2fa164b4d
MD5 ddf50a95a72ee2d211f466f7e5c6cc53
BLAKE2b-256 154529693cfbfb567750862102cd935c5a9e78ab384fc0cb9321dfa60de2444d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 24.6 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.2.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f423feb8523cab83b31b68f63fb64f344509ed83d6c2f2fe0306024be919a49c
MD5 7ce30b7380aa2ba6cfa4c2d51c0d9476
BLAKE2b-256 19af61a62bae8d3457d1c73b525f10ee5c35273068ec9463fb38bc5241791244

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11b672d8e1fa90a675766b93cf34a087da1617ad81b0caf4c141db76cf50b5da
MD5 41bde9eb4541ebc3d00c67fcaf27fcb8
BLAKE2b-256 de7d9ad26cdf8bb1c22232b4c75bacad2e866b9c0241fae4b2046cdf669ad75f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3911197315169ede3bf8333d58d0b66cbe8e6eb9951fb4dcd3aee30db6fd2bc1
MD5 7639214bab26d2168fb16bed1450fecc
BLAKE2b-256 42e4feac0d42df69eb092f60949772c26a92e08885ed1ef4e34fe0c7a57dd6aa

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b044ff0e4e997178f5b27ab7f7f3c2898ad92c0b0c4d641663488011b5fa6740
MD5 075114f33bf4d0dea037b19f063306e1
BLAKE2b-256 4e05dc0114b2c84c0b9312645f61174334430383fc50fe64913ea61f307d3192

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 24.6 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.2.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 15c6bf86865b6ab4a39b9882df419c02afa62009dee1c689ae115be04c2c6fc2
MD5 680293466392b2107811c9f2cdb2dd33
BLAKE2b-256 4dff2e573f5a4ec9545852415d5fcd3f7deff67629e16feb5eee6ba1a4021f45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 325b901b7f6f867074f3681101051c2976b6b6f989b657c419d1ff2b60c7618b
MD5 d324ea123a210b6afbb8b0e863eb493c
BLAKE2b-256 fcd445e1dad1bd051a2c35d6d0a00ff658c9c92ea2e4f1bf86e398485794f706

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 61dd0f0baa0fe5652e6cd9ea5e15b09dcfd366c7709e4ba9562474216e0ddbb2
MD5 8c581e56a0e783efd17dd3829be7ee60
BLAKE2b-256 87b7a3e4b752c80bdb25ee7c861bd2f7893389b0c64766343b65b0747542db13

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8c6c016bfa839278652a6b50fdba5449dbe38d549b2a4af6eb50ca32a5e7063b
MD5 d584d5138e41f839050a355f7b6e4a8e
BLAKE2b-256 dee53674f9c36541123d0b2478f7e8605e2cc072023ea77aee2a9eb987ab46fe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 24.6 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.2.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a7527a50795aedf776fbbce4e35f2c0050d46a3e061fb060afd7c9b6f7c3f21e
MD5 2df58ff6fb27e035ee531f610fe6bbf3
BLAKE2b-256 dc35b007a41a29a6b071378b3269358797fb61eb3f9b4dd0f77743bfba8aa22e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c9ab334eb1d860c07befbe4bc12f773f4a9b67e57e975d5e181d91f41845a709
MD5 016d982db707fd345793729dfed87af9
BLAKE2b-256 bc92b75e8db7bf8a136eedc2facb39642343bbe90759b66611c7fec0125319d0

See more details on using hashes here.

File details

Details for the file turbopipe-1.2.2-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for turbopipe-1.2.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a0e18d81c5920d0780a92aee63ced0ba39387dea323b6b49c05d903ce664b31c
MD5 7c5633903e50a16f6df44220837e3cf5
BLAKE2b-256 3dae386a522393f35ac4f5cb16fa8a440e20d095328eb40469cfb5917067b666

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