From c955415cc3b13a9cda40a10b13f898fbf9342b81 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 28 Dec 2018 10:01:16 +0100 Subject: [PATCH] Switch from ujson to rapidjson --- freqtrade/data/history.py | 8 ++++---- freqtrade/misc.py | 6 +++--- freqtrade/tests/test_misc.py | 4 ++-- requirements.txt | 2 +- setup.py | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/freqtrade/data/history.py b/freqtrade/data/history.py index f4ff46a1a..54d9abf2b 100644 --- a/freqtrade/data/history.py +++ b/freqtrade/data/history.py @@ -13,7 +13,7 @@ from typing import Optional, List, Dict, Tuple, Any import arrow from pandas import DataFrame -import ujson +import rapidjson from freqtrade import misc, constants, OperationalException from freqtrade.data.converter import parse_ticker_dataframe @@ -25,11 +25,11 @@ logger = logging.getLogger(__name__) def json_load(data): """ - load data with ujson + load data with rapidjson Use this to have a consistent experience, - otherwise "precise_float" needs to be passed to all load operations + sete number_mode to "NM_NATIVE" for greatest speed """ - return ujson.load(data, precise_float=True) + return rapidjson.load(data, number_mode=rapidjson.NM_NATIVE) def trim_tickerlist(tickerlist: List[Dict], timerange: TimeRange) -> List[Dict]: diff --git a/freqtrade/misc.py b/freqtrade/misc.py index 832437951..7bb9ddced 100644 --- a/freqtrade/misc.py +++ b/freqtrade/misc.py @@ -3,7 +3,6 @@ Various tool function for Freqtrade and scripts """ import gzip -import json import logging import re from datetime import datetime @@ -11,6 +10,7 @@ from typing import Dict import numpy as np from pandas import DataFrame +import rapidjson logger = logging.getLogger(__name__) @@ -77,10 +77,10 @@ def file_dump_json(filename, data, is_zip=False) -> None: if not filename.endswith('.gz'): filename = filename + '.gz' with gzip.open(filename, 'w') as fp: - json.dump(data, fp, default=str) + rapidjson.dump(data, fp, default=str, number_mode=rapidjson.NM_NATIVE) else: with open(filename, 'w') as fp: - json.dump(data, fp, default=str) + rapidjson.dump(data, fp, default=str, number_mode=rapidjson.NM_NATIVE) def format_ms_time(date: int) -> str: diff --git a/freqtrade/tests/test_misc.py b/freqtrade/tests/test_misc.py index 017bf372f..991e03fa0 100644 --- a/freqtrade/tests/test_misc.py +++ b/freqtrade/tests/test_misc.py @@ -46,12 +46,12 @@ def test_common_datearray(default_conf) -> None: def test_file_dump_json(mocker) -> None: file_open = mocker.patch('freqtrade.misc.open', MagicMock()) - json_dump = mocker.patch('json.dump', MagicMock()) + json_dump = mocker.patch('rapidjson.dump', MagicMock()) file_dump_json('somefile', [1, 2, 3]) assert file_open.call_count == 1 assert json_dump.call_count == 1 file_open = mocker.patch('freqtrade.misc.gzip.open', MagicMock()) - json_dump = mocker.patch('json.dump', MagicMock()) + json_dump = mocker.patch('rapidjson.dump', MagicMock()) file_dump_json('somefile', [1, 2, 3], True) assert file_open.call_count == 1 assert json_dump.call_count == 1 diff --git a/requirements.txt b/requirements.txt index d0fe69970..d7a6f748e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,4 +23,4 @@ scikit-optimize==0.5.2 py_find_1st==1.1.3 #Load ticker files 30% faster -ujson==1.35 +python-rapidjson==0.6.3 diff --git a/setup.py b/setup.py index b9e3620df..11f957e67 100644 --- a/setup.py +++ b/setup.py @@ -38,7 +38,7 @@ setup(name='freqtrade', 'cachetools', 'coinmarketcap', 'scikit-optimize', - 'ujson', + 'python-rapidjson', 'py_find_1st' ], include_package_data=True,