summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2021-05-26 22:12:23 -0500
committerJordan Cook <jordan.cook@pioneer.com>2021-06-11 11:13:39 -0500
commit68bdfa960e8f3a630fe4f53529de4d3ae3bf8216 (patch)
tree3693fe4cc97b1eb586b1fdb3badf3007baebdddf /examples
parent3b638c9e8956bcd4900b62fcabafd0ce528069b6 (diff)
downloadrequests-cache-68bdfa960e8f3a630fe4f53529de4d3ae3bf8216.tar.gz
Add a BSON serializer
Diffstat (limited to 'examples')
-rw-r--r--examples/performance_test.py48
1 files changed, 28 insertions, 20 deletions
diff --git a/examples/performance_test.py b/examples/performance_test.py
index 4d092b1..3e64f2d 100644
--- a/examples/performance_test.py
+++ b/examples/performance_test.py
@@ -1,6 +1,7 @@
-"""A manual test to compare performance of different serializers"""
-# flake8: noqa: F401
-"""
+"""A manual test to compare performance of different serializers
+
+Latest results:
+---------------
CPU Results (x10000 iterations):
jsonpickle.encode: 8.846
jsonpickle.decode: 9.166
@@ -14,25 +15,34 @@ cattrs+json.dumps: 2.005
cattrs+json.loads: 2.312
cattrs+ujson.dumps: 1.803
cattrs+ujson.loads: 2.128
+cattrs+bson.dumps: 1.550
+cattrs+bson.loads: 1.322
"""
+# flake8: noqa: F401
import json
import os
import pickle
+
import sys
from os.path import abspath, dirname, join
from time import perf_counter as time
-import jsonpickle
import ujson
from cattr.preconf.json import make_converter
-from memory_profiler import profile
-from rich import print
+
+try:
+ from rich import print
+except ImportError:
+ pass
+
+# import jsonpickle
+# from memory_profiler import profile
# Add project path
sys.path.insert(0, os.path.abspath('..'))
from requests_cache import CachedSession
-from requests_cache.serializers import BaseSerializer, JSONSerializer, PickleSerializer
+from requests_cache.serializers import BaseSerializer, BSONSerializer, JSONSerializer, PickleSerializer
ITERATIONS = 10000
@@ -41,8 +51,8 @@ r = session.get('https://httpbin.org/get?x=y')
r = session.get('https://httpbin.org/get?x=y')
-def test_jsonpickle():
- base_test('jsonpickle', jsonpickle.encode, jsonpickle.decode)
+# def test_jsonpickle():
+# base_test('jsonpickle', jsonpickle.encode, jsonpickle.decode)
def test_pickle():
@@ -56,13 +66,13 @@ def test_cattrs():
def test_cattrs_pickle():
s = PickleSerializer()
- base_test('PickleSerializer', s.dumps, s.loads)
+ base_test('cattrs+pickle', s.dumps, s.loads)
def test_cattrs_json():
s = BaseSerializer(converter_factory=make_converter)
base_test(
- 'json',
+ 'cattrs+json',
lambda obj: json.dumps(s.unstructure(obj)),
lambda obj: s.structure(json.loads(obj)),
)
@@ -71,12 +81,17 @@ def test_cattrs_json():
def test_cattrs_ujson():
s = BaseSerializer(converter_factory=make_converter)
base_test(
- 'ujson',
+ 'cattrs+ujson',
lambda obj: ujson.dumps(s.unstructure(obj)),
lambda obj: s.structure(ujson.loads(obj)),
)
+def test_cattrs_bson():
+ s = BSONSerializer()
+ base_test('cattrs+bson', s.dumps, s.loads)
+
+
def base_test(module, serialize, deserialize):
start = time()
serialized = [serialize(r) for i in range(ITERATIONS)]
@@ -87,14 +102,6 @@ def base_test(module, serialize, deserialize):
print(f'{module}.{deserialize.__name__} x{ITERATIONS}: {time() - start:.3f}')
-def dumps(self, response: CachedResponse) -> bytes:
- return json.dumps(super().unstructure(response), indent=2) # , cls=ResponseJSONEncoder)
-
-
-def loads(self, obj: bytes) -> CachedResponse:
- return super().structure(json.loads(obj))
-
-
if __name__ == '__main__':
print('CPU:')
# test_jsonpickle()
@@ -103,6 +110,7 @@ if __name__ == '__main__':
test_cattrs_pickle()
test_cattrs_json()
test_cattrs_ujson()
+ test_cattrs_bson()
# Memory
# print('\nMemory:')