diff options
author | Jordan Cook <jordan.cook@pioneer.com> | 2021-05-26 22:12:23 -0500 |
---|---|---|
committer | Jordan Cook <jordan.cook@pioneer.com> | 2021-06-11 11:13:39 -0500 |
commit | 68bdfa960e8f3a630fe4f53529de4d3ae3bf8216 (patch) | |
tree | 3693fe4cc97b1eb586b1fdb3badf3007baebdddf /examples | |
parent | 3b638c9e8956bcd4900b62fcabafd0ce528069b6 (diff) | |
download | requests-cache-68bdfa960e8f3a630fe4f53529de4d3ae3bf8216.tar.gz |
Add a BSON serializer
Diffstat (limited to 'examples')
-rw-r--r-- | examples/performance_test.py | 48 |
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:') |