|
4 | 4 | ## Introduction
|
5 | 5 |
|
6 | 6 | Message packer for socket communications.
|
7 |
| -Pure-Python implementation and it is [*much slower*](#benchmark) as `pickle`, `marshal` or even `json`, but much safer for production. |
| 7 | +Pure-Python implementation and it is [*slightly slower*](#benchmark) as `pickle`, `marshal` or even `json`, but much safer for production. |
8 | 8 | The following types are supported for packing and unpacking:
|
9 | 9 | - `None`
|
10 |
| - - `bool` |
| 10 | + - Booleans: `True` and `False` |
11 | 11 | - `int`
|
12 |
| - - `float` |
13 |
| - - `string` |
| 12 | + - Floats: `float`, `inf` and `-inf` |
| 13 | + - `str` |
14 | 14 | - `bytearray` (during unpacking it will be converted to `bytes`)
|
15 | 15 | - `bytes`
|
16 | 16 | - `list` (during unpacking it will be converted to `tuple`)
|
17 | 17 | - `tuple`
|
18 | 18 | - `dict` (dict key type can be any from this list)
|
19 |
| - - `set` (full support) |
| 19 | + - `set` |
20 | 20 |
|
21 | 21 | ## Installation
|
22 | 22 |
|
23 |
| -Requires python version 3.7 or later. |
| 23 | +Requires python version 3.8 or later. |
24 | 24 |
|
25 | 25 | To install the latest release on [PyPI](https://pypi.org/project/python-fspacker/),
|
26 | 26 | simply run:
|
@@ -55,45 +55,109 @@ print( fsPacker.loads(data) )
|
55 | 55 | Environment: Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz, DIMM DDR4 Synchronous Registered (Buffered) 2133 MHz
|
56 | 56 | ```shell
|
57 | 57 | $/python-fspacker: python3 -m benchmark
|
58 |
| -Test data one [1 times] |
| 58 | +Batch 1# started |
59 | 59 | pickle
|
60 |
| - dump size: 369436 byte |
61 |
| - dump : best: 0.00158157 <- median: 0.00163573 - average: 0.00164407 -> worst: 0.00173204 |
62 |
| - loads: best: 0.00157589 <- median: 0.00160991 - average: 0.00162757 -> worst: 0.00216137 |
| 60 | + packed data size: 369436 byte |
| 61 | + dump : best: 0.00097681 <- median avg: 0.00097981 - average: 0.00098675 -> worst: 0.00115466 |
| 62 | + loads: best: 0.00116250 <- median avg: 0.00116567 - average: 0.00116768 -> worst: 0.00123618 |
63 | 63 | marshal
|
64 |
| - dump size: 474624 byte |
65 |
| - dump : best: 0.00084558 <- median: 0.00089093 - average: 0.00089481 -> worst: 0.00096658 |
66 |
| - loads: best: 0.00135764 <- median: 0.00137184 - average: 0.00138647 -> worst: 0.00170787 |
67 |
| - FSPacker |
68 |
| - dump size: 329293 byte |
69 |
| - dump : best: 0.03001423 <- median: 0.03062541 - average: 0.03170544 -> worst: 0.04718978 |
70 |
| - loads: best: 0.02231823 <- median: 0.02331613 - average: 0.02334542 -> worst: 0.02514797 |
71 |
| -Test data two [1 times] |
| 64 | + packed data size: 474624 byte |
| 65 | + dump : best: 0.00060849 <- median avg: 0.00060978 - average: 0.00061214 -> worst: 0.00066010 |
| 66 | + loads: best: 0.00093875 <- median avg: 0.00094239 - average: 0.00094469 -> worst: 0.00099110 |
| 67 | + FSPacker version 1 |
| 68 | + packed data size: 348332 byte |
| 69 | + dump : best: 0.00140599 <- median avg: 0.00142470 - average: 0.00143550 -> worst: 0.00179069 |
| 70 | + loads: best: 0.00092720 <- median avg: 0.00108024 - average: 0.00107529 -> worst: 0.00113729 |
| 71 | + FSPacker PURE PYTHON version 1 |
| 72 | + packed data size: 329293 byte |
| 73 | + dump : best: 0.02668814 <- median avg: 0.02687568 - average: 0.02691436 -> worst: 0.02727839 |
| 74 | + loads: best: 0.02563514 <- median avg: 0.02585654 - average: 0.02623195 -> worst: 0.02991657 |
| 75 | + FSPacker version 2 |
| 76 | + packed data size: 324346 byte |
| 77 | + dump : best: 0.00133745 <- median avg: 0.00135156 - average: 0.00136461 -> worst: 0.00155367 |
| 78 | + loads: best: 0.00094138 <- median avg: 0.00107694 - average: 0.00107477 -> worst: 0.00114164 |
| 79 | + FSPacker PURE PYTHON version 2 |
| 80 | + packed data size: 314318 byte |
| 81 | + dump : best: 0.02291694 <- median avg: 0.02304409 - average: 0.02304181 -> worst: 0.02318106 |
| 82 | + loads: best: 0.02749131 <- median avg: 0.02768044 - average: 0.02768100 -> worst: 0.02799873 |
| 83 | + |
| 84 | +Batch 2# started |
72 | 85 | pickle
|
73 |
| - dump size: 274491 byte |
74 |
| - dump : best: 0.00107667 <- median: 0.00108967 - average: 0.00110260 -> worst: 0.00119756 |
75 |
| - loads: best: 0.00145767 <- median: 0.00148819 - average: 0.00150257 -> worst: 0.00176494 |
| 86 | + packed data size: 274491 byte |
| 87 | + dump : best: 0.00084737 <- median avg: 0.00085283 - average: 0.00085566 -> worst: 0.00091460 |
| 88 | + loads: best: 0.00100438 <- median avg: 0.00101581 - average: 0.00101901 -> worst: 0.00110241 |
76 | 89 | marshal
|
77 |
| - dump size: 360242 byte |
78 |
| - dump : best: 0.00077111 <- median: 0.00081842 - average: 0.00099891 -> worst: 0.00156944 |
79 |
| - loads: best: 0.00127497 <- median: 0.00128988 - average: 0.00141144 -> worst: 0.00256521 |
80 |
| - FSPacker |
81 |
| - dump size: 238499 byte |
82 |
| - dump : best: 0.02852817 <- median: 0.02961052 - average: 0.03016038 -> worst: 0.03880055 |
83 |
| - loads: best: 0.02128199 <- median: 0.02241915 - average: 0.02516957 -> worst: 0.03794705 |
84 |
| -Test data three [1000 times] |
| 90 | + packed data size: 360242 byte |
| 91 | + dump : best: 0.00051488 <- median avg: 0.00051733 - average: 0.00051980 -> worst: 0.00054507 |
| 92 | + loads: best: 0.00083179 <- median avg: 0.00083660 - average: 0.00084212 -> worst: 0.00090665 |
| 93 | + FSPacker version 1 |
| 94 | + packed data size: 271694 byte |
| 95 | + dump : best: 0.00146050 <- median avg: 0.00147431 - average: 0.00147690 -> worst: 0.00153197 |
| 96 | + loads: best: 0.00092286 <- median avg: 0.00100156 - average: 0.00099671 -> worst: 0.00102327 |
| 97 | + FSPacker PURE PYTHON version 1 |
| 98 | + packed data size: 238499 byte |
| 99 | + dump : best: 0.02538159 <- median avg: 0.02551851 - average: 0.02557210 -> worst: 0.02591332 |
| 100 | + loads: best: 0.02445310 <- median avg: 0.02459201 - average: 0.02464271 -> worst: 0.02524533 |
| 101 | + FSPacker version 2 |
| 102 | + packed data size: 238735 byte |
| 103 | + dump : best: 0.00135346 <- median avg: 0.00136909 - average: 0.00137037 -> worst: 0.00141406 |
| 104 | + loads: best: 0.00090187 <- median avg: 0.00100334 - average: 0.00101569 -> worst: 0.00130636 |
| 105 | + FSPacker PURE PYTHON version 2 |
| 106 | + packed data size: 221546 byte |
| 107 | + dump : best: 0.02124800 <- median avg: 0.02136108 - average: 0.02141090 -> worst: 0.02174148 |
| 108 | + loads: best: 0.02539373 <- median avg: 0.02556542 - average: 0.02576320 -> worst: 0.02921140 |
| 109 | + |
| 110 | +Batch 3# started |
85 | 111 | pickle
|
86 |
| - dump size: 97 byte |
87 |
| - dump : best: 0.00066121 <- median: 0.00067347 - average: 0.00067562 -> worst: 0.00069691 |
88 |
| - loads: best: 0.00081164 <- median: 0.00081801 - average: 0.00082066 -> worst: 0.00083911 |
| 112 | + packed data size: 274511 byte |
| 113 | + dump : best: 0.00087786 <- median avg: 0.00088081 - average: 0.00088287 -> worst: 0.00093917 |
| 114 | + loads: best: 0.00098829 <- median avg: 0.00099558 - average: 0.00099822 -> worst: 0.00105612 |
89 | 115 | marshal
|
90 |
| - dump size: 79 byte |
91 |
| - dump : best: 0.00061814 <- median: 0.00062130 - average: 0.00062324 -> worst: 0.00063816 |
92 |
| - loads: best: 0.00083109 <- median: 0.00083498 - average: 0.00084022 -> worst: 0.00088368 |
93 |
| - FSPacker |
94 |
| - dump size: 85 byte |
95 |
| - dump : best: 0.01618888 <- median: 0.01634808 - average: 0.01681845 -> worst: 0.02476933 |
96 |
| - loads: best: 0.01527784 <- median: 0.01556471 - average: 0.01594638 -> worst: 0.02066095 |
| 116 | + packed data size: 360267 byte |
| 117 | + dump : best: 0.00051608 <- median avg: 0.00051854 - average: 0.00051974 -> worst: 0.00054176 |
| 118 | + loads: best: 0.00082532 <- median avg: 0.00082907 - average: 0.00083079 -> worst: 0.00085855 |
| 119 | + FSPacker version 1 |
| 120 | + packed data size: 414729 byte |
| 121 | + dump : best: 0.00300953 <- median avg: 0.00304670 - average: 0.00307232 -> worst: 0.00353145 |
| 122 | + loads: best: 0.00209713 <- median avg: 0.00237827 - average: 0.00240026 -> worst: 0.00317319 |
| 123 | + FSPacker PURE PYTHON version 1 |
| 124 | + packed data size: 365886 byte |
| 125 | + dump : best: 0.06813255 <- median avg: 0.06852698 - average: 0.06859602 -> worst: 0.06918136 |
| 126 | + loads: best: 0.06472549 <- median avg: 0.06544865 - average: 0.06549210 -> worst: 0.06638827 |
| 127 | + FSPacker version 2 |
| 128 | + packed data size: 381787 byte |
| 129 | + dump : best: 0.00308844 <- median avg: 0.00310415 - average: 0.00311051 -> worst: 0.00318295 |
| 130 | + loads: best: 0.00206454 <- median avg: 0.00235557 - average: 0.00234600 -> worst: 0.00239830 |
| 131 | + FSPacker PURE PYTHON version 2 |
| 132 | + packed data size: 348954 byte |
| 133 | + dump : best: 0.06123471 <- median avg: 0.06176491 - average: 0.06173875 -> worst: 0.06195223 |
| 134 | + loads: best: 0.07077837 <- median avg: 0.07135906 - average: 0.07146089 -> worst: 0.07298397 |
| 135 | + |
| 136 | +Batch 4# started |
| 137 | + pickle |
| 138 | + packed data size: 97 byte |
| 139 | + dump : best: 0.00055353 <- median avg: 0.00056210 - average: 0.00056276 -> worst: 0.00057487 |
| 140 | + loads: best: 0.00064643 <- median avg: 0.00065715 - average: 0.00065725 -> worst: 0.00066493 |
| 141 | + marshal |
| 142 | + packed data size: 79 byte |
| 143 | + dump : best: 0.00047902 <- median avg: 0.00048745 - average: 0.00048688 -> worst: 0.00049302 |
| 144 | + loads: best: 0.00058795 <- median avg: 0.00059175 - average: 0.00059234 -> worst: 0.00060103 |
| 145 | + FSPacker version 1 |
| 146 | + packed data size: 85 byte |
| 147 | + dump : best: 0.00077319 <- median avg: 0.00078550 - average: 0.00078805 -> worst: 0.00080470 |
| 148 | + loads: best: 0.00068854 <- median avg: 0.00076246 - average: 0.00075894 -> worst: 0.00078787 |
| 149 | + FSPacker PURE PYTHON version 1 |
| 150 | + packed data size: 85 byte |
| 151 | + dump : best: 0.01360374 <- median avg: 0.01369004 - average: 0.01373398 -> worst: 0.01407292 |
| 152 | + loads: best: 0.01672420 <- median avg: 0.01689699 - average: 0.01688315 -> worst: 0.01702459 |
| 153 | + FSPacker version 2 |
| 154 | + packed data size: 74 byte |
| 155 | + dump : best: 0.00075289 <- median avg: 0.00076416 - average: 0.00076328 -> worst: 0.00077514 |
| 156 | + loads: best: 0.00053710 <- median avg: 0.00055360 - average: 0.00055652 -> worst: 0.00058802 |
| 157 | + FSPacker PURE PYTHON version 2 |
| 158 | + packed data size: 74 byte |
| 159 | + dump : best: 0.00831298 <- median avg: 0.00834915 - average: 0.00835809 -> worst: 0.00851608 |
| 160 | + loads: best: 0.01466914 <- median avg: 0.01474124 - average: 0.01477603 -> worst: 0.01507150 |
97 | 161 | ```
|
98 | 162 | ## Contribution
|
99 | 163 |
|
|
0 commit comments