Асинхронная выборка Служб Google за 100 запросов в секунду - PullRequest
0 голосов
/ 29 февраля 2012

Мне нужно получить около 100 страниц за ограниченное время и отправить коды результатов в ответ. Службы Google имеют ограничение в 10 асинхронных запросов за один раз. Я думаю об очередях, но они работают в фоновом режиме, может быть, оплачиваемое приложение может помочь? Вот мой код, когда более 14 URL-адресов [] это не с:

Файл "/Base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", строка 371, в _get_fetch_result повысить DeadlineExceededError (str (err)) DeadlineExceededError: ApplicationError: 5

class MainPage(webapp.RequestHandler):
   results = []
   urls = [ "http://google.com/",
            "http://yahoo.com",
            "http://goo.gl",
            "http://stackoverflow.com",
            "http://windows.com",
            "http://wikipedia.org"
            ]
   counter = len(urls)

   def handle_result(self, rpc, rowIndex):
      self.counter -= 1
      result = rpc.get_result()
      if result:
         self.results.append(str(rowIndex)+": "+str(result.status_code)+"<br>")
      if not self.counter:
         self.response.out.write("".join(self.results))

   def create_callback(self, rpc, rowIndex):
      return lambda: self.handle_result(rpc, rowIndex)

   def get(self):
      rpcs = []
      rowIndex = 0
      for url in self.urls:
         rpc = urlfetch.create_rpc(deadline = 10)
         rpc.callback = self.create_callback(rpc, rowIndex)
         urlfetch.make_fetch_call(rpc, url)
         rpcs.append(rpc)
         rowIndex += 1
      # Finish all RPCs, and let callbacks process the results.
      for rpc in rpcs:
         rpc.wait()

1 Ответ

0 голосов
/ 29 февраля 2012

Вы можете поставить задачу в очередь, затем с помощью канала API уведомить и отправить результат пользователю. В настоящее время каналы работают только с клиентами Javascript. Google планирует внедрить клиенты каналов на других языках или, по крайней мере, задокументировать клиент канала для тех, кто хочет написать их реализацию.

...