Skip to content
Snippets Groups Projects
Commit 7f744bde authored by Ivan Kondov's avatar Ivan Kondov
Browse files

switch to json encoder that provides a better storage size estimate

parent fef1c100
No related branches found
No related tags found
1 merge request!341Resolve "Problems with background I/O"
Pipeline #422291 passed
......@@ -4,7 +4,6 @@ scipy
pandas >=2.2.0
pint >=0.24.3
pint-pandas ==0.6.2
pymongo >= 4.7.3
fireworks >=2.0.4
pyyaml
dill
......
......@@ -49,7 +49,6 @@ install_requires =
pandas >=2.2.0
pint >=0.24.3
pint-pandas ==0.7.1
pymongo >= 4.7.3
fireworks >=2.0.4
pyyaml
dill
......
"""serialization/deserialization code"""
from dataclasses import dataclass
import typing
from dataclasses import dataclass
from json import JSONEncoder
from itertools import islice
import numpy
import pandas
import pint_pandas
from bson import json_util
from fireworks.utilities.fw_serializers import FWSerializable
from fireworks.utilities.fw_serializers import serialize_fw
from fireworks.utilities.fw_serializers import recursive_serialize
......@@ -45,6 +46,18 @@ def versioned_serialize(func):
return decorator
def get_json_size(obj, max_size):
"""compute JSON size in bytes of a JSON serializable object up to max_size"""
gen = JSONEncoder().iterencode(obj)
chunk_size = 1024
json_size = 0
next_chunk = len(''.join(islice(gen, chunk_size)).encode())
while next_chunk and json_size < max_size:
json_size += next_chunk
next_chunk = len(''.join(islice(gen, chunk_size)).encode())
return json_size
@dataclass
class FWDataObject(FWSerializable):
"""top-level FWSerializable dataclass to hold any FWSerializable objects"""
......@@ -63,7 +76,7 @@ class FWDataObject(FWSerializable):
if self.datastore is None:
dct = recursive_dict(self.value)
b_thres = ioops.DATASTORE_CONFIG['inline-threshold']
b_size = json_util.get_size(dct, b_thres)
b_size = get_json_size(dct, b_thres)
logger.debug('%s: data type: %s', f_name, type(self.value))
logger.debug('%s: data size [B]: %s', f_name, b_size)
logger.debug('%s: inline-threshold [B]: %s', f_name, b_thres)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment