Skip to main content

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:

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


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 details)

Uploaded Source

Built Distributions

bencode_c-0.0.14-cp38-abi3-win_amd64.whl (23.1 kB view details)

Uploaded CPython 3.8+ Windows x86-64

bencode_c-0.0.14-cp38-abi3-win32.whl (22.6 kB view details)

Uploaded CPython 3.8+ Windows x86

bencode_c-0.0.14-cp38-abi3-musllinux_1_2_x86_64.whl (55.5 kB view details)

Uploaded CPython 3.8+ musllinux: musl 1.2+ x86-64

bencode_c-0.0.14-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (56.7 kB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.17+ x86-64

bencode_c-0.0.14-cp38-abi3-macosx_11_0_arm64.whl (20.7 kB view details)

Uploaded CPython 3.8+ macOS 11.0+ ARM64

bencode_c-0.0.14-cp38-abi3-macosx_10_9_x86_64.whl (20.9 kB view details)

Uploaded CPython 3.8+ macOS 10.9+ x86-64

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

Hashes for bencode_c-0.0.14.tar.gz
Algorithm Hash digest
SHA256 8bc5e6f71b67776020c2bdd036cc3716dc8e28640bc987debb6bd6b9c7931396
MD5 7afd84036fb3ec4050ea8747c30cc0ee
BLAKE2b-256 98bd41e0cac72d96c89aa9bf52011c73598dd440b95affb6dcf508d3b3a7cd3d

See more details on using hashes here.

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

Hashes for bencode_c-0.0.14-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e5ca6f49df9b390b20306bf2719b0d5a02160673bae678a896a89c32d3cc40a8
MD5 bf2b72421564b15d1deab3e5c65dad33
BLAKE2b-256 d31f405b8530ab949e569a821377f2a521c70f68065ad85b21a1144c593922a7

See more details on using hashes here.

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

Hashes for bencode_c-0.0.14-cp38-abi3-win32.whl
Algorithm Hash digest
SHA256 83fbb1746deae6f8f6f416da867a9f88974b5efcb73a00a7f1f8c90d1d0514a6
MD5 d04fdb0af29a920ef046e16b02379a80
BLAKE2b-256 414438980767780facd5fa11247634b5e1681aa86d1a971cfc74b30e2d477acf

See more details on using hashes here.

File details

Details for the file bencode_c-0.0.14-cp38-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

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

See more details on using hashes here.

File details

Details for the file bencode_c-0.0.14-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

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

See more details on using hashes here.

File details

Details for the file bencode_c-0.0.14-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bencode_c-0.0.14-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a3323f2537463d2deb2c4e76b1418d72da06e4e9dbb830e5b003ca6bd8d1551
MD5 8bbd5c426c17d7a22ce1398b29b34239
BLAKE2b-256 373581916e8a6c6d3fc2e097ad11629532fa74d6d7baa80c7928d06f2655d883

See more details on using hashes here.

File details

Details for the file bencode_c-0.0.14-cp38-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

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

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