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
bencode_c-0.0.14.tar.gz
(14.5 kB
view hashes)
Built Distributions
Close
Hashes for bencode_c-0.0.14-cp38-abi3-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e5ca6f49df9b390b20306bf2719b0d5a02160673bae678a896a89c32d3cc40a8 |
|
MD5 | bf2b72421564b15d1deab3e5c65dad33 |
|
BLAKE2b-256 | d31f405b8530ab949e569a821377f2a521c70f68065ad85b21a1144c593922a7 |
Close
Hashes for bencode_c-0.0.14-cp38-abi3-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 83fbb1746deae6f8f6f416da867a9f88974b5efcb73a00a7f1f8c90d1d0514a6 |
|
MD5 | d04fdb0af29a920ef046e16b02379a80 |
|
BLAKE2b-256 | 414438980767780facd5fa11247634b5e1681aa86d1a971cfc74b30e2d477acf |
Close
Hashes for bencode_c-0.0.14-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 57d7ebcc5eba21acd812a2899ce02b4e04235a7f4008089ada83bb07e7942e5b |
|
MD5 | c3a2946ab312094f7bb7d21836dac8c6 |
|
BLAKE2b-256 | a3a91536b7a8385a9f6cec83e429e6cf87e9d729d7e27518c826d985bdab2715 |
Close
Hashes for bencode_c-0.0.14-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23754d45f9ad456d3aa666d804caafac88f9e7a8d1bd98888a0774035e3a2c3e |
|
MD5 | d319fd841e4f04fbbe170801974d5f84 |
|
BLAKE2b-256 | ab72c1cb81ab02dd66cf9e443aa901fc9c6e35b23ae4861c52dff9b4dbb6439a |
Close
Hashes for bencode_c-0.0.14-cp38-abi3-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a3323f2537463d2deb2c4e76b1418d72da06e4e9dbb830e5b003ca6bd8d1551 |
|
MD5 | 8bbd5c426c17d7a22ce1398b29b34239 |
|
BLAKE2b-256 | 373581916e8a6c6d3fc2e097ad11629532fa74d6d7baa80c7928d06f2655d883 |
Close
Hashes for bencode_c-0.0.14-cp38-abi3-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e93e210c3d560d9af30976d9198d5c9538ce003da1dd8ddef9682b75a9c27532 |
|
MD5 | 284b7910e78727dbf8575f707598f59a |
|
BLAKE2b-256 | f44e1bb07a37038aa91336f68c329a015c163461ce8f35f273f86375a17e291f |