A fast and correct bencode serialize/deserialize library
Project description
bencode-c
bencode serialize/deserialize written in native c extension.
pip install bencode-c
import bencode_c
# NOTICE: we decode bencode bytes to bytes, not str.
assert bencode_c.bdecode(b'd5:hello5:worlde') == {b'hello': b'world'}
assert bencode_c.bencode(...) == b'...'
Benchmark
this maybe the fastest bencode library in python.
compared packages:
abi3
: native c extension (this package) bencode-cpy
: pure python implement bencode-pycy
: cython implement fast-bencodemypy
: pure python implement with mypyc bencode2
test cases are 40 torrents from real world.
(windows, python3.10 AMD R7 5800X)
Decode
------------------------------------------------------------ benchmark 'case=decode': 4 tests ------------------------------------------------------------
Name (time in us) Mean Min Max Median StdDev Iterations
----------------------------------------------------------------------------------------------------------------------------------------------------------
test_benchmark[decode-abi3] 1,024.6516 (1.0) 987.3901 (1.0) 1,097.5088 (1.0) 1,010.7185 (1.0) 42.6630 (1.0) 1013
test_benchmark[decode-cy] 2,471.1399 (2.41) 2,269.6842 (2.30) 2,592.6601 (2.36) 2,484.0398 (2.46) 121.1285 (2.84) 1000
test_benchmark[decode-mypy] 7,451.1057 (7.27) 7,319.7134 (7.41) 7,697.5504 (7.01) 7,399.4402 (7.32) 149.9720 (3.52) 127
test_benchmark[decode-py] 21,020.7260 (20.51) 20,832.5390 (21.10) 21,180.5220 (19.30) 21,047.4730 (20.82) 139.9841 (3.28) 100
----------------------------------------------------------------------------------------------------------------------------------------------------------
Encode
--------------------------------------------------- benchmark 'case=encode': 4 tests ---------------------------------------------------
Name (time in ms) Mean Min Max Median StdDev Iterations
----------------------------------------------------------------------------------------------------------------------------------------
test_benchmark[encode-abi3] 4.2812 (1.0) 4.1505 (1.0) 4.3833 (1.0) 4.2897 (1.0) 0.0843 (1.56) 1000
test_benchmark[encode-mypy] 5.0277 (1.17) 4.9340 (1.19) 5.0887 (1.16) 5.0244 (1.17) 0.0606 (1.12) 1000
test_benchmark[encode-cy] 5.7779 (1.35) 5.7304 (1.38) 5.8682 (1.34) 5.7562 (1.34) 0.0541 (1.0) 178
test_benchmark[encode-py] 13.7456 (3.21) 13.5073 (3.25) 14.0211 (3.20) 13.5974 (3.17) 0.2524 (4.67) 100
----------------------------------------------------------------------------------------------------------------------------------------
(linux, python3.10, Intel G6405)
Decode
--------------------------------------------------- benchmark 'case=decode': 4 tests ---------------------------------------------------
Name (time in ms) Mean Min Max Median StdDev Iterations
----------------------------------------------------------------------------------------------------------------------------------------
test_benchmark[decode-abi3] 1.9905 (1.0) 1.6988 (1.0) 2.4797 (1.0) 1.9208 (1.0) 0.3053 (1.0) 121
test_benchmark[decode-cy] 3.1906 (1.60) 2.6953 (1.59) 3.6342 (1.47) 3.2118 (1.67) 0.3971 (1.30) 100
test_benchmark[decode-mypy] 12.7124 (6.39) 11.4128 (6.72) 14.8851 (6.00) 12.4180 (6.46) 1.3009 (4.26) 18
test_benchmark[decode-py] 36.5785 (18.38) 33.5474 (19.75) 44.7655 (18.05) 34.5241 (17.97) 4.7173 (15.45) 10
----------------------------------------------------------------------------------------------------------------------------------------
Encode
--------------------------------------------------- benchmark 'case=encode': 4 tests ---------------------------------------------------
Name (time in ms) Mean Min Max Median StdDev Iterations
----------------------------------------------------------------------------------------------------------------------------------------
test_benchmark[encode-abi3] 4.5476 (1.0) 4.2847 (1.0) 4.9841 (1.0) 4.4301 (1.0) 0.2711 (1.0) 100
test_benchmark[encode-cy] 6.3922 (1.41) 5.9589 (1.39) 6.8652 (1.38) 6.1731 (1.39) 0.4102 (1.51) 100
test_benchmark[encode-mypy] 7.8197 (1.72) 7.2574 (1.69) 8.3987 (1.69) 7.8091 (1.76) 0.4947 (1.82) 100
test_benchmark[encode-py] 23.9431 (5.26) 23.4045 (5.46) 24.2830 (4.87) 24.0749 (5.43) 0.3818 (1.41) 10
----------------------------------------------------------------------------------------------------------------------------------------
development
git clone -r https://github.com/trim21/bencode-c bencode-c
cd bencode-c
python -m venv .venv
# enable venv
source .venv/bin/activate
pip install -e .
pytest -sv
CMakeLists.txt
is for IDE to find includes, not for building files.
use setup.py
to build python extension.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file bencode_c-0.0.14.tar.gz
.
File metadata
- Download URL: bencode_c-0.0.14.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8bc5e6f71b67776020c2bdd036cc3716dc8e28640bc987debb6bd6b9c7931396 |
|
MD5 | 7afd84036fb3ec4050ea8747c30cc0ee |
|
BLAKE2b-256 | 98bd41e0cac72d96c89aa9bf52011c73598dd440b95affb6dcf508d3b3a7cd3d |
File details
Details for the file bencode_c-0.0.14-cp38-abi3-win_amd64.whl
.
File metadata
- Download URL: bencode_c-0.0.14-cp38-abi3-win_amd64.whl
- Upload date:
- Size: 23.1 kB
- Tags: CPython 3.8+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e5ca6f49df9b390b20306bf2719b0d5a02160673bae678a896a89c32d3cc40a8 |
|
MD5 | bf2b72421564b15d1deab3e5c65dad33 |
|
BLAKE2b-256 | d31f405b8530ab949e569a821377f2a521c70f68065ad85b21a1144c593922a7 |
File details
Details for the file bencode_c-0.0.14-cp38-abi3-win32.whl
.
File metadata
- Download URL: bencode_c-0.0.14-cp38-abi3-win32.whl
- Upload date:
- Size: 22.6 kB
- Tags: CPython 3.8+, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 83fbb1746deae6f8f6f416da867a9f88974b5efcb73a00a7f1f8c90d1d0514a6 |
|
MD5 | d04fdb0af29a920ef046e16b02379a80 |
|
BLAKE2b-256 | 414438980767780facd5fa11247634b5e1681aa86d1a971cfc74b30e2d477acf |
File details
Details for the file bencode_c-0.0.14-cp38-abi3-musllinux_1_2_x86_64.whl
.
File metadata
- Download URL: bencode_c-0.0.14-cp38-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 55.5 kB
- Tags: CPython 3.8+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 57d7ebcc5eba21acd812a2899ce02b4e04235a7f4008089ada83bb07e7942e5b |
|
MD5 | c3a2946ab312094f7bb7d21836dac8c6 |
|
BLAKE2b-256 | a3a91536b7a8385a9f6cec83e429e6cf87e9d729d7e27518c826d985bdab2715 |
File details
Details for the file bencode_c-0.0.14-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: bencode_c-0.0.14-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 56.7 kB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23754d45f9ad456d3aa666d804caafac88f9e7a8d1bd98888a0774035e3a2c3e |
|
MD5 | d319fd841e4f04fbbe170801974d5f84 |
|
BLAKE2b-256 | ab72c1cb81ab02dd66cf9e443aa901fc9c6e35b23ae4861c52dff9b4dbb6439a |
File details
Details for the file bencode_c-0.0.14-cp38-abi3-macosx_11_0_arm64.whl
.
File metadata
- Download URL: bencode_c-0.0.14-cp38-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 20.7 kB
- Tags: CPython 3.8+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a3323f2537463d2deb2c4e76b1418d72da06e4e9dbb830e5b003ca6bd8d1551 |
|
MD5 | 8bbd5c426c17d7a22ce1398b29b34239 |
|
BLAKE2b-256 | 373581916e8a6c6d3fc2e097ad11629532fa74d6d7baa80c7928d06f2655d883 |
File details
Details for the file bencode_c-0.0.14-cp38-abi3-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: bencode_c-0.0.14-cp38-abi3-macosx_10_9_x86_64.whl
- Upload date:
- Size: 20.9 kB
- Tags: CPython 3.8+, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e93e210c3d560d9af30976d9198d5c9538ce003da1dd8ddef9682b75a9c27532 |
|
MD5 | 284b7910e78727dbf8575f707598f59a |
|
BLAKE2b-256 | f44e1bb07a37038aa91336f68c329a015c163461ce8f35f273f86375a17e291f |