У меня есть флеш-сервер, который выполняет запросы чтения и записи для фреймов данных.У меня есть механизм кэширования (использующий библиотеку кеширования) для кэширования фреймов данных при получении запроса, а затем с использованием фрейма кэшированных данных при получении запроса на тот же фрейм данных.
В настоящее время я использую блокировку, которая делаетвсе потоки загружают свой (разные) фреймы данных последовательно, а затем обрабатывают загруженный фрейм данных далее.
Мне бы хотелось, чтобы при получении нескольких запросов на разные фреймы данных каждый поток (для каждого запроса) загружалсяфрейм данных (используя pandas.read_excel) одновременно в память, а не последовательно.
В настоящее время я использую простую блокировку, которая гарантирует, что один и тот же фрейм данных не загружается дважды, но мне нужно загрузить несколько фреймов данныхтакже параллельно.
`def read_query_request (query, file_path, sheet_name, source_id): logger.info ('Обработка запроса чтения для источника' + sheet_name + '_' + source_id)
try:
data_frame_identifier = sheet_name + '_' + source_id
# Load df with lock ensuring data frame loads only once.
with lock:
start_l=time.time()
load_data_frame(file_path, sheet_name, source_id)
end_l=time.time()
logger.info('BENCHMARKING INFO: Read Request, Data frame load time ---' + str(end_l - start_l))
#cache_state()
# Executing query on loaded data frame
# sheetName = getSheetName( query )
query = query.replace('dataframe', data_frame_identifier)
start_e = time.time()
queryResult = ps.sqldf(query)
end_e = time.time()
logger.info('BENCHMARKING INFO: Read Request, psql query execution time ---' + str(end_e - start_e))
start_j = time.time()
queryResult = queryResult.to_json(orient='records')
res = {"isErrored":"False", "results": json.loads(queryResult)}
result = json.dumps(res)
end_j = time.time()
logger.info('BENCHMARKING INFO: Read Request, json conversion time ---' + str(end_j - start_j))
logger.info(LRU_cache.keys())
return result`