def main_function(keys):
values = []
for key in keys:
value, = get_from_remote_location([key])
values.append(value)
return values
def get_from_remote_location(keys):
return map(str, keys)
У меня есть функция, которая перебирает набор ключей, вызывает дорогую функцию для каждого ключа, чтобы получить значение, и возвращает коллекцию значений. Я хотел бы вызвать дорогую функцию только один раз. Это надуманный пример, и я мог бы просто избегать перебора ключей, но это только для иллюстрации. Ограничения таковы: вызов должен быть выполнен только один раз, функция main_function должна использовать итерацию по сбору ключей и выполнять, казалось бы, удаленный вызов для каждого ключа.
Я думал об использовании asyncio
для сбора ключей Сначала, но решения, которые я придумал, были ужасными. Что-то вроде:
keys = []
...
async def get_from_remote_location_batched(key):
keys.append(key)
await until_all_keys_have_been_appended_and_remote_call_has_been_done(keys)[key]
Редактировать 2020-01-28:
У меня есть решение. Постараюсь опубликовать завтра.