В начале я объединил эти три файла в три объекта json, а затем повторил их с помощью обычного for- петля. Благодаря этому решению мой код потребляет много памяти моей виртуальной машины, поскольку я загружаю все данные.
Я понял, что мне нужны только данные для определенного идентификатора для создания окончательного json. файл, и мне не следует загружать все данные для всех идентификаторов одновременно. Поэтому я подумал, что генератор Python будет решением в этом случае. Я создал следующий код:
Код: Выделить всё
from json import loads
def load_data_set(string_restaurants_data: str,
string_menus_data: str,
string_matchings_data: str,):
menus_data = loads(string_menus_data)
matchings_data = loads(string_matchings_data)
restaurants_data = loads(string_restaurants_data)
for id, menu_data in menus_data.items():
yield id, restaurants_data[id], menu_data, matchings_data[id] if id in matchings_data else "{}"
def main():
'''
some code to read the json.gz files. The data is stored in these three string variables: string_restaurants_data, string_menus_data and string_matchings_data
'''
restaurants_data_set = load_data_set(string_restaurants_data,
string_menus_data,
string_matchings_data)
size_generator = sys.getsizeof(restaurants_data_set)
del string_menus_data
del string_restaurants_data
del string_matchings_data
gc.collect()
list_result = {}
for restaurant in restaurants_data_set:
result_data = aggregate_menu_data(restaurant[0],
dumps(restaurant[2]),
dumps(restaurant[1]),
dumps(restaurant[3]),
string_parameters,
eval(debug))
list_result.update(result_data)
data['result'] = dumps(list_result)
Версия Python: 3.11
Подробнее здесь: https://stackoverflow.com/questions/790 ... onsumption