Как сделать асинхронные запросы API в приложении GAE? - PullRequest
0 голосов
/ 11 декабря 2018

Я работаю над приложением, основанным на GAE с python 2.7.13.Я хочу сделать несколько асинхронных вызовов API внутри обработчика.Примерно так:

class MakeRequests(webapp2.RequestHandler):
   def post(self, *v, **kv):
       *do an async api call#1*
       *do an async api call#2*
       *do an async api call#3*

       *wait for response from all of above api requests*
       *make response in a way like if call#1 failes, make it's expected*
       *attributes in response as None, if call#2 succeeds add it's*
       *attributes in response etc. This is just an example.*

Для этой цели я пробовал библиотеки типа asyncio, grequests, requests и simple-requests, они, похоже, не работают, потому что либонесовместимо с GAE или python 2.7.13.Может ли кто-нибудь помочь мне здесь?

1 Ответ

0 голосов
/ 11 декабря 2018

Urlfetch, который по умолчанию связан с GAE , может выполнять асинхронные вызовы :

from google.appengine.api import urlfetch

def post(self, *v, **kv):
  rpcs = []
  for url in urls:
    rpc = urlfetch.create_rpc()
    urlfetch.make_fetch_call(rpc, url)
    rpcs.append(rpc)

  results = [rpc.get_result() for rpc in rpcs]
  # do stuff with results

Если по какой-то причине вы не хотите использовать urlfetch, вы можетераспараллелить запросы вручную, используя threading и синхронизированную очередь для чтения результатов.

...