Как стать автором
Обновить

Асинхронный RPC

Время на прочтение1 мин
Количество просмотров1.6K
Автор оригинала: Guido van Rossum
В то время, как я закладываю основу новой клиентской библиотеки для работы с Datastore с поддержкой асинхронных запросов, я добавил кое-какой низкоуровневый функционал, который Вы можете использовать уже сегодня. Единственный API с документированной поддержкой асинхронных запросов – это urlfetch. И этот функционал может оказаться довольно полезным.

Предположим, нам необходимо выбрать определенные данные с удаленного сервиса. Сервис имеет 2 инстанса, оба из которых немного нагружены. То, что мы хотим сделать, это послать запросы обоим сервисам одновременно (это легкая часть), и затем дождаться результата от одного из них.


from google.appengine.api import urlfetch, apiproxy_stub_map

urls = ['http://service1.com', 'http://service2.com']  # Etc.

rpcs = []
for url in urls:
   rpc = urlfetch.create_rpc(deadline=1.0)
   urlfetch.make_fetch_call(rpc, url)
   rpcs.append(rpc)

rpc = apiproxy_stub_map.UserRPC.wait_any(rpcs)
# Now rpc is the first rpc that returned a result. Have at it!


Вот и все! Если Вы хотите узнать больше об этом полезном функционале, загляните в docstring в App Engine SDK.

Вы также можете неоднократно вызывать wait_any(), чтобы получить следующий ответ. Удостоверьтесь, что удалили отработанный запрос из списка: спецификация wait_any() подсказывает, что возвращается первый завершенный запрос из списка, независимо от того, смотрели Вы его или нет.

Также имейте ввиду, что в данный момент нет функционала для отмены других запросов. Проблема в том, что даже если Вы будете игнорировать другие запросы, App Engine Runtime всеравно будет ожидать их выполнения или таймаута.

Наконец, есть еще один похожий метод UserRPC.wait_all(), который ожидает завершения всех запросов (он ничего не возвращает).
Теги:
Хабы:
Всего голосов 7: ↑4 и ↓3+1
Комментарии0

Публикации

Истории

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань