Query of metadata is taking 250-350 seconds for 49 hazard IDs. This can be reduced to about 30s if the query loop is broken after receiving N responses where N is the number of IDs in the query. In both cases, the query runs in about the same amount of time, but the ending iteration consumes hundreds of seconds if a break
isn't used.
import time
import ast
import toshi_hazard_store
hazard_ids = [
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYxMw==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU1MA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTMyMg==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU1MQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYwNA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM3OA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU0Mg==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYxOQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU5Nw==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYxMA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTUyOA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU0OQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM2MA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTMyMw==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYwMQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM3Mw==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTQ2NQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTMyMQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM2MQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM2Nw==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU5NA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM3MQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM2OA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTY0Mw==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYwNw==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU0NQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYxMQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYwMA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM2Mg==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYwNg==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYxMg==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU5NQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTQ2Nw==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU0OA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU5Ng==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU0NA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU0MQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYwOQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTUyOQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTU0MA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTQ3MQ==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTM3Mg==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYwOA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTUxOA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYxNg==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTUzMA==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTQ3Ng==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTQ2Ng==',
'T3BlbnF1YWtlSGF6YXJkU29sdXRpb246MTMyOTYwNQ=='
]
vs30 = 225
def query_asis():
metadata = {}
tic_0 = time.perf_counter()
for meta in toshi_hazard_store.query_v3.get_hazard_metadata_v3(hazard_ids, [vs30]):
tic = time.perf_counter()
hazard_id = meta.hazard_solution_id
gsim_lt = ast.literal_eval(meta.gsim_lt)
metadata[hazard_id] = gsim_lt
toc = time.perf_counter()
print(
f'Elapsed time of query loop: {toc-tic_0:0.5f} seconds. Time to load metadata for {hazard_id}: {toc-tic:0.5f} seconds.'
)
return metadata
def query_withbreak():
metadata = {}
tic_0 = time.perf_counter()
for i, meta in enumerate(toshi_hazard_store.query_v3.get_hazard_metadata_v3(hazard_ids, [vs30])):
tic = time.perf_counter()
hazard_id = meta.hazard_solution_id
gsim_lt = ast.literal_eval(meta.gsim_lt)
metadata[hazard_id] = gsim_lt
toc = time.perf_counter()
print(
f'Elapsed time of query loop: {toc-tic_0:0.5f} seconds. Time to load metadata for {hazard_id}: {toc-tic:0.5f} seconds.'
)
if i==len(hazard_ids)-1:
print('reached all ids, break iteration')
break
return metadata
def time_query(query_fn):
tic = time.perf_counter()
query_fn()
toc = time.perf_counter()
print(f'time to run all queries using {query_fn} {toc-tic:0.3f} seconds')
if __name__ == "__main__":
time_query(query_withbreak)
print('-'*50)
time_query(query_asis)