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

Uploaded Source

Built Distributions

turbopipe-1.2.1-cp312-cp312-win_amd64.whl (24.7 kB view details)

Uploaded CPython 3.12 Windows x86-64

turbopipe-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.2 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.12 macOS 11.0+ ARM64

turbopipe-1.2.1-cp311-cp311-win_amd64.whl (24.7 kB view details)

Uploaded CPython 3.11 Windows x86-64

turbopipe-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.1 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11 macOS 11.0+ ARM64

turbopipe-1.2.1-cp310-cp310-win_amd64.whl (24.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

turbopipe-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.10 macOS 11.0+ ARM64

turbopipe-1.2.1-cp39-cp39-win_amd64.whl (24.7 kB view details)

Uploaded CPython 3.9 Windows x86-64

turbopipe-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.1 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.9 macOS 11.0+ ARM64

turbopipe-1.2.1-cp38-cp38-win_amd64.whl (24.7 kB view details)

Uploaded CPython 3.8 Windows x86-64

turbopipe-1.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.4 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

turbopipe-1.2.1-cp38-cp38-macosx_11_0_arm64.whl (19.6 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

turbopipe-1.2.1-cp37-cp37m-win_amd64.whl (24.7 kB view details)

Uploaded CPython 3.7m Windows x86-64

turbopipe-1.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.4 kB view details)

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

File details

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

File metadata

  • Download URL: turbopipe-1.2.1.tar.gz
  • Upload date:
  • Size: 28.8 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.1.tar.gz
Algorithm Hash digest
SHA256 711ef3313c2e9ef99658bf3470c0fbb0b38530cef48c7e2f5789dac72619d147
MD5 c8afe2ee857f00079377eef51532ff59
BLAKE2b-256 c06985e4b9fa9cb93563200837946fafc28833009086691c722efe1bd57a4ceb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d0cc9373a516b7003e33b1af79f6f2af9b60ee3cdf57a8f4c205bbd9ed964157
MD5 6e5694655dea5e9ccf5119a13f2fa921
BLAKE2b-256 87f21b1fdddb6e9d4d974a0bb58784c34ddadda4b373a57c2a454d899826ee83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d4f9df504789ae994587f11c7a1c3d717a4dd6ae0e08f406ad5ec72e9f232df2
MD5 fcdccd82e925a3b1ace0896e39f80e3c
BLAKE2b-256 ba59aadc537846aac70e1fcf1fd69c466a3157df5bd1562f7101cfc273ebe060

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 140d9e547519be239ae91c4cfc8f069e3a6a1d967411b37eb9815ffafec4dfdf
MD5 acd623ae7ee15773cf13b86818a6161d
BLAKE2b-256 21eccfceb6ab9a369d5da293f0fd22c0f3daef3c588a61628603aa6e2d25776c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a39cdf76a213c4151c4ad1623c337a983bb0bc27956dfa4e2575fbc890972d1e
MD5 bfe0ea15e0c8ac981db351e6adaa77f7
BLAKE2b-256 0360cc1c2ac142c4e6622f888bc357b8bd6dec282a257774f1f8a3e494fec67b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d6b12fac72301e9503801554ccc7f90f35aeac0c314a189a1c9a9bcf40afcb37
MD5 e33f93a57bfd496277962d0f46aefcd5
BLAKE2b-256 b3b0a64086664ccf49d7ef8b110cd7f5768b0ce2cf4c940baf66d54e602cc6c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e9ed20876d7e30851c85690644c1d2818af3c0f475c12af1ac0b9252bed9a361
MD5 cd153167c269fb4334475db1a042870a
BLAKE2b-256 acb1d6ea200c1f526efde9e726b45c14dddc968c994281aa9234cd68515c74f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b55f4ccccd49d198d92c9fa03941bb12c400cf4c3f490035a97c28f90f4dada8
MD5 b456bb142bc495deb9cf92df891a1ef1
BLAKE2b-256 f2aa4ad8f6fcc93b07bf0ac82db8e97dbe3969c94366b9674d334481101455b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d98bba99e73e8329b7a2901cc907862c28dab98df1fcd1572171ba7f4d800b0
MD5 c6a7324e8019764882ce504e9e70b1b7
BLAKE2b-256 39acc5448593446562029cdc73a81f70f5dcea7685fb3b3b6f84da310cc2916f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cb9190969e39b000e86a27ba07c7bee3ed3211658dfb40fc2931df7b2494cb1e
MD5 dbe4562760f188146f0087df0083858c
BLAKE2b-256 c623b5bd848041751c3fa4ae002858fc0685e0bacafa03e5f8c58bd6a592b8df

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 24.7 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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f222de23e07f887630a4caea06f6064544b911af5b470a50660022efa9d06d2f
MD5 6cab0d4c0ba81862f09af9092679fae1
BLAKE2b-256 4218a36a0ccb54a3c16aa8b0b4ba4c5a00491692314a12764c68f8056158f4f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 486979f06a57f06b0cecee6b2e05c450f78cbf02f76939726230a695b5bd8e38
MD5 5e6fc64009e960efdceedf313a7461de
BLAKE2b-256 7365d49f16d570f84eddeb59a29558ec9c40aea16c2aad3a00c744f6c0a00c38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 68d2592b8470a1743519a8df8fdd49fa9aec3b95e1e289748c2b8bc88a734016
MD5 0673f37925e74d7fc09f9318db61b503
BLAKE2b-256 34ee8bda1806435692ecfec58148f8c07db4b0b15a6f31454dc1ca0f3addd240

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 24.7 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.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 559aa0b02290e941fa80d43b440279ebb1620c36a6e917967b4478214dd25bc0
MD5 8889ad46570e44433b9440493be30fd7
BLAKE2b-256 12b3f354e23aa656fe6b30850e985a2295b771ec92d471aadcafabd3e8700175

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eca980fb7251694c2723ff5ae45faeac6de1f229773a7a6254f065594e28bb67
MD5 f41a40b92831dd8a4158a577e0038c8c
BLAKE2b-256 835377c4f452cd7f30fa9a2863b3c45a84c00f56a823f6e7ee7b53a4c4b4bb4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e021ff3a10911cc9c5440ea940be5b3e85eefa165f8714167efda57e88a993ab
MD5 9e296584526143e933d096171f79de38
BLAKE2b-256 8cba0ff30925aa79421d6538e552db91d9d74eec7890f6e2a8f6a5f85488298b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turbopipe-1.2.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 24.7 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.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 0a8e104bff4b1e91dd38cfb0f71055659ecf0d93540cc187a8d045b18944ded3
MD5 5f56ce395b2bd6a440201db2ca7e06ea
BLAKE2b-256 ad1ef33ca54da24e0626c300ed8a9edab7db58d078a0cff7757c0d7f656bea52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turbopipe-1.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 62e64c7c7d6d08be497dc4fb72ef8b2015516106e7b01b2d08e5b68728fe8552
MD5 a2eb4e69fd7370484a517535c6a72dbe
BLAKE2b-256 944fdf2279e605286193247411f769127c2c6c4ca5083ffba612e017bc5a4aa4

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