Тайм-аут Google App Engine? - PullRequest
       6

Тайм-аут Google App Engine?

5 голосов
/ 07 сентября 2011

В приложении Google App Engine я использовал следующие строки для чтения страницы с сайта:

  String Url="http://...",line,Result="";

  URL url=new URL(Url+"?r="+System.currentTimeMillis());
  BufferedReader reader=new BufferedReader(new InputStreamReader(url.openStream()));

  while ((line=reader.readLine())!=null) { Result+=line+"\n"; }
  reader.close();

Но я получил следующую ошибку:

Uncaught exception from servlet
com.google.apphosting.api.DeadlineExceededException: This request (f5e2889605d27d42) started at 2011/09/07 03:20:41.458 UTC and was still executing at 2011/09/07 03:21:30.888 UTC.
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326)
    at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:276)
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:82)
    at com.google.appengine.tools.development.TimedFuture.get(TimedFuture.java:55)
    at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
    at com.google.apphosting.runtime.ApiProxyImpl.doSyncCall(ApiProxyImpl.java:177)
    at com.google.apphosting.runtime.ApiProxyImpl.access$000(ApiProxyImpl.java:56)
    at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:150)
    at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:148)
    at java.security.AccessController.doPrivileged(Native Method)

Кажется, это заняло больше времени, чем хотелось бы ждать, что я могу сделать, если этот сайт работает медленно?

Ответы [ 2 ]

4 голосов
/ 07 июня 2014

Если ваш код выполняется внутри обработчика запросов, то по умолчанию существует 60-секундный крайний срок, предписанный App-Engine. Вы не можете это изменить. См. Строку «Сроки» / столбец «Автоматическое масштабирование» диаграммы на этой странице в разделе «Типы масштабирования»:

https://developers.google.com/appengine/docs/java/modules/

Однако этот код сможет работать в течение нескольких часов, если вы измените свой модуль на использование «ручного масштабирования» и экземпляра «B1» - «B4». Пример:

по умолчанию / SRC / главная / веб-приложение / WEB-INF / AppEngine-web.xml:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>myapp</application>
  <module>default</module>
  <version>1</version>
  <threadsafe>true</threadsafe>

  <instance-class>B1</instance-class>
  <manual-scaling>
    <instances>1</instances>
  </manual-scaling>
</appengine-web-app>

В этом типе экземпляра ваши запросы обычно не будут задерживаться часами. (В документации утверждается, что срок является «неопределенным».)

4 голосов
/ 07 сентября 2011

A DeadlineExceededException выбрасывается, когда ваш код обрабатывает запрос к веб-приложению, обработка которого занимает более 30 секунд. Предположительно, вашему коду требуется некоторое время для обработки из-за того, что ему пришлось ждать получения данных с какого-либо другого сайта.

Вы можете создать задачу в очереди задач , чтобы извлекать и обрабатывать эти данные, а также изменять поток веб-запросов / ответов, чтобы отвечать на ход выполнения вашей задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...