Skip to main content

๐ŸŒ€ Faster MemoryView 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()
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, encoding
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 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
  • 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.1.0.tar.gz (28.6 kB view details)

Uploaded Source

Built Distributions

turbopipe-1.1.0-cp312-cp312-win_amd64.whl (24.3 kB view details)

Uploaded CPython 3.12 Windows x86-64

turbopipe-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.0 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

turbopipe-1.1.0-cp312-cp312-macosx_11_0_arm64.whl (19.0 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

turbopipe-1.1.0-cp311-cp311-win_amd64.whl (24.3 kB view details)

Uploaded CPython 3.11 Windows x86-64

turbopipe-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

turbopipe-1.1.0-cp311-cp311-macosx_11_0_arm64.whl (19.0 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

turbopipe-1.1.0-cp310-cp310-win_amd64.whl (24.3 kB view details)

Uploaded CPython 3.10 Windows x86-64

turbopipe-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

turbopipe-1.1.0-cp310-cp310-macosx_11_0_arm64.whl (19.0 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

turbopipe-1.1.0-cp39-cp39-win_amd64.whl (24.3 kB view details)

Uploaded CPython 3.9 Windows x86-64

turbopipe-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

turbopipe-1.1.0-cp39-cp39-macosx_11_0_arm64.whl (19.0 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

turbopipe-1.1.0-cp38-cp38-win_amd64.whl (24.3 kB view details)

Uploaded CPython 3.8 Windows x86-64

turbopipe-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

turbopipe-1.1.0-cp38-cp38-macosx_11_0_arm64.whl (19.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

turbopipe-1.1.0-cp37-cp37m-win_amd64.whl (24.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

turbopipe-1.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.2 kB view details)

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

File details

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

File metadata

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

File hashes

Hashes for turbopipe-1.1.0.tar.gz
Algorithm Hash digest
SHA256 82509c972a7cd2c0971f3f2264217569e3191df7927dc73bed86bbf6bcce8acb
MD5 2426a63c15c5a988878ef0753965ead1
BLAKE2b-256 4ee275e0cd6fd2bb33cce6c91491ab6d1e17093a46d62a7cc8b49964a0655260

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0b5eeb72ec3cffce241327f5519e713078eea2a0cdb936ce7bab443b4c14eb85
MD5 408fbbef2757e0b80e404fbf9af40cc6
BLAKE2b-256 fd4b5bbaae23246ee2ac35161f942f73bea93ff455b08295f4438d19d4ff4fa7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3f592747f4ce60dd594fdba60eebdd776edcb8f59b09ccc74bfc119440c5c5a8
MD5 61a32ffd33c705cb60af23795f69576e
BLAKE2b-256 0edf3776b4cb511cb31ef6cb07add2951802712f25ec82e88734043fe80aefb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b6b3c2987967cf97ed4bbaab1413ce5911c20a23b24b59b91008aba399f9f96
MD5 6d5c507767160ffaacba5def9ca8a348
BLAKE2b-256 269b1eec4c4c482ddd22da1dfd74677013cdd8520f9f42ee49a12dd100e0b3c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 006b58ec747889958118331065068c41783a2baee1139cbb09eb4c29439434bb
MD5 f655ab153ea3e35df7eb7b529ca18edb
BLAKE2b-256 90e7e36016a228045183ba109624b65a76ffe08a1bdc11e1107eb7778fb2a15c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9e69ab0bbb5639a21b034d4597697e056cf9cf3604a2d15b5a1f273a86906960
MD5 cb36c65eeae4f743dafdeb60c0df9dfa
BLAKE2b-256 e6561c6ac0ce8b2a932fdff502a06535532df26cbb67fc0d894f12d0b5c47545

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6222d4aa305453aa7d52cc96b35e4cf1b14a898a140ff62841324cc885e96658
MD5 2d352a131985cded50832e7430e407f6
BLAKE2b-256 cb87b2a5d205648a5b5d478ba36c35b5b812eb882921e65f9dac807c0b37c4e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 fa67b4b8cc5c057a552e71e108913a3f7256428605fb3f1b3218a425ace4a635
MD5 70a4a6ecba2fb55840b9f7fdbce8f487
BLAKE2b-256 1ea46141e8c102f7ac62672976ec0b847525193cd093930ac801e324e1f9210d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aad7258259c51f0815373b0e53dad34aee416bf197666701a8e0124d3f57158f
MD5 022074c3fd741acb1537a96c326a2093
BLAKE2b-256 8e771a3196f2a601e7d27c6de758324be57ea4ce1935b8e8829beb8895c5271d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 313dcb4c2114c2b7c8f0af3ef78ab0f508fcdfe97235ebee4503492e1aee446f
MD5 86e3bcf39de089cac9ed71d0a6ffd9e2
BLAKE2b-256 d9d8acec58d91dd1ce7d53a553ff90a45a762ead9ce88920cbc0db75236a6deb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.1.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 24.3 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.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5d9aa370f7ef37fa4a0b6342784ecb8b4a9b66ae29da94528a42ed86536b1ca6
MD5 747e5b5928e96ea637b16975e8b417db
BLAKE2b-256 c40bae04a86fe18fb026e925fd0c5b7b1aa1e247c1271f0949da12839fc35d90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 88fc8dd0bc7e2615f7c9bbab0a91c4739beaa45af8ea8a4f3649602f46c722a1
MD5 6266fa71c7fa82d5a5042977f05ae244
BLAKE2b-256 c4b9fc434e45c35b24432d197be80c55b491a0401f657080d9aab6072c27106b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2894b9fb7994bc8a50d3ea3ceb1b3685f6ac30a96eb6f470f799374f32f7da0
MD5 4419a30c692f6cb39df68beb6c398a8e
BLAKE2b-256 cb9430dbc7dc13406906f5fffba59eacbb8d1c5bc2db0d69d239f64e6c6520d3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.1.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 24.3 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.1.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 9b12b6d5275cc534b9a2377daae100ae561f8ace5ad918f52445a28e6919e958
MD5 c9fa40fe9eedd70d2ef838c9b00bc7b7
BLAKE2b-256 aec4d9928f5a5555d3009908effb21129e1c9ec516f0a9e3a94347a609476596

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aedb51e56e558d73454a57e40456661be27b1ae2b30f88e0bdf6a41ff78b89e4
MD5 b5b6cc358255cf0abc2c62bd1d089d21
BLAKE2b-256 5bda34236c7b73d20d12e24139a88c7192d46752b34e265fff60ccf1232fafec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 306d08919e6e38dcc13718a35c9c973f8815df075a5a8db49702deb68459b8ea
MD5 6c4d9e18ffadc821857204a39b9f231f
BLAKE2b-256 d1bbb28901be661b55459bf520e10f6e0cc9a4ea3d15edfd447c7cdf6e020cf7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.1.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 24.3 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.1.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 06624ceede249662ed1e4ae392abe81c7f40dd31aedfd00a83c2794c35ada52b
MD5 d7bfe7708dc3eba54dbffe72a0e1c861
BLAKE2b-256 37c8a87e2835788fdba08e4ada454dafda785aa6bf4b724bdd63ba4b289096fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 045092fc3136ea585c25d4593f54ad19ebbe17f990b0e4085ef8a488922e3e63
MD5 e88ee973baa8f78449fc9843a9517253
BLAKE2b-256 38e0a66f7702eee9c08ab158996b4170769933dde529f97274744be1727ba45a

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