Skip to main content

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

Reason this release was yanked:

Occasional segfault on sync(buffer) when searching through a queue at the time a pipe finished

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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.12 Windows x86-64

turbopipe-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.0-cp312-cp312-macosx_11_0_arm64.whl (19.4 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

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

Uploaded CPython 3.11 Windows x86-64

turbopipe-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.0-cp311-cp311-macosx_11_0_arm64.whl (19.4 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

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

Uploaded CPython 3.10 Windows x86-64

turbopipe-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.0-cp310-cp310-macosx_11_0_arm64.whl (19.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

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

Uploaded CPython 3.9 Windows x86-64

turbopipe-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.0-cp39-cp39-macosx_11_0_arm64.whl (19.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

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

Uploaded CPython 3.8 Windows x86-64

turbopipe-1.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.0-cp38-cp38-macosx_11_0_arm64.whl (19.4 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

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

Uploaded CPython 3.7m Windows x86-64

turbopipe-1.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.2 kB view details)

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

File details

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

File metadata

  • Download URL: turbopipe-1.2.0.tar.gz
  • Upload date:
  • Size: 28.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.2.0.tar.gz
Algorithm Hash digest
SHA256 bf2d92bd86eb7163ff4912ffc99ce716c596354b2fbd56a2c03ae8943a8955d2
MD5 518060f0b7807f05f8f2aa61b44ae917
BLAKE2b-256 d167a774b382c5a2cce0ff1a5064e97dc907abe2d037770f2c855cd02997d43e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bf621d34c7f10523e18379fcd231377e382414d119acbc83a5b09d11611575c4
MD5 2c2337c00343450052e66518a9e7e2a2
BLAKE2b-256 2141d688985d14dabf1af85ced7d4f51dc2bbb6d7a2c352ae6a9edfebb25b3c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c2fc1c1172fff61ea4f8d510a9a638eef986bc2732a3db453d30522460ccffe2
MD5 53490cab9dd076d7c45e14a5edaec4c2
BLAKE2b-256 68a35162f0d81ab323f559f785a3a544b5ed7a6e99bc926ea7ab563e7afa586a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bdc7e9fd043afaa930a93ac78f6f25c078f99a07b128f45a3f64ef59edb2840e
MD5 d5f554cfcc27ba69a5209dec0982b4f0
BLAKE2b-256 347c784aa9d23439185a1599899a950a1aedc71dc7567ca47a7a01ef5a5a2fa8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 83a1e77bde1fd11e6186578008d43220241c6132999e907460d1cf67836f4401
MD5 1c6afe50685d944c351d9a5656fd70e7
BLAKE2b-256 b743c247ed06deca83b4c0609cce2f3dbf9ce51a50f737780955811da0973212

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9b7d63c4ce6bc8d799304585afc59a821d5adc4cd6b08e44f8d7ba267cc59bf7
MD5 242811c52c2d4bbad76533d67f8c54be
BLAKE2b-256 954b2ace0e28ce71e5055ce5aef039fa2d5f687894716c18ae8906008e5078ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4f4cc280d31abaf5ca53dc62d2bef46108a54d62b1213eba9b0b46cf9e5e7a4a
MD5 4df7ee197766387303e5f1c42c973702
BLAKE2b-256 5c76effde78c6bc6604f431796670a0aff4415cf457d673de47d1c85357d2dc9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2e5bdde996e6be2de71a3be01cce5f7a1186d1580d4b2d6f2bf153c37f04c6f3
MD5 a5c8536a3ab4c8b5293f5e7f9e765a3a
BLAKE2b-256 9456cdff8b4db40544ef9f44c927eb81e270537dbed3da0d031e648c070b6c2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 06334c0d33a0d1f13e558c94eb65244def84546c0243892adafbecfcf4182180
MD5 69aaf62145622fc87051d2176703fadf
BLAKE2b-256 7dae6473ab755a4af89e5e621989b4b41ab5f00a9cf45b80a1963dd981838ee8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d90c8899a6e88983e5e0ef149e9eeb554273d59eea91813bf4f9c76ef081f04
MD5 56934465335b09226b683398f39a03b0
BLAKE2b-256 cffeaa51419082423be161e925d686884588c991c6d2649bc4e2d6107651594e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.0-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.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 55bc23c1114f7121b499ce188f368dd69da0cd3d3e7433259188c7697103b66b
MD5 2201f3add0bc817f87c6627a0a645903
BLAKE2b-256 84bde321cdbb5ef97dac3eb69aefefada4e3bcdf0240faff9d7fab0a365f0048

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e0c0e64b93b68eaabdb044b1939bd5070753c6df1c2056e5d16f7d08c2039109
MD5 da7c4961c3737a436f8c3af64d1d9519
BLAKE2b-256 19bf0adc7f713ebf9fb5f07e003c1187c6e884086366088429abd9cb5043b42b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ffdae81449c4d90157ae026785d816014b6e4cb809a16340019a19820a462061
MD5 6a98f2bf654292542955de655ba0b87b
BLAKE2b-256 79aff183b2460f3a4369c13ba98a642677b902451bee46c7a6a9df8fd7ccd293

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.0-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.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 3ecd79506a018009ad4acc3428c86b992be04251fbc48b794ea28208dfbb73b4
MD5 c5be458d429a2d3e82f0bc90727ae49f
BLAKE2b-256 46a524df90abcf8e2d53f050e172545223367565422b569285b8e192de2476bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8caa3dacbef968265b089853bd6e2975bafa537bf505108157ed20d6c848b04d
MD5 114abde584084a4a56aca93bc5e581d3
BLAKE2b-256 9541c250d08e760ba1c15fef83dff470be5baf0cbc75a3327a4379c8f3c73663

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ed591fdd4afc2763e769e5c9db7003af83c909ffdd6ca45bb0b7b0c2303fc93
MD5 57308f9005e9d0220535d912b28592ad
BLAKE2b-256 c81895a3b13da3297e0f8e96cc757fe198651c172b9baa97f1c27632c649f9a1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.0-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.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 8311dbadbfa5ddbbf52b1757d3e717940d96abfc5ff0ec28e95d0f5d8d592b39
MD5 75175d78f1f1c84d5b38097d379edefe
BLAKE2b-256 e8dcecc8c5c0aa476b6b32e21c44b965f3d95c785dbb61978662f77b7a39b8b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a08bded7e261e38f08024a2f3369181de30f318f53b91d34df5b479667226e4d
MD5 724ae303c890e9b7c2dc0bfe300cfbfa
BLAKE2b-256 21f0ffe0ff7621dd6a28e1d311c3e12baae2bdd56a9b2541ee391d345bbe10ce

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