Google App Engine temps?
Dans Google App Engine application, j'ai utilisé les lignes suivantes à la lecture d'une page d'un site :
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();
Mais j'ai eu l'erreur suivante :
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)
Semble qu'il a pris plus de temps que cela serait comme attendre, que puis-je faire si un site est lent ?
C'est un délai d'attente de demande, ce qui se produit après 30 secondes. Depuis URLFetch les demandes sont limitées à 10 secondes, vous devez faire plus que juste cet appel. Que faites-vous?
Oui, je recevais contenu de la page à partir de 6 catégories et de voir où mon NMJava est classé, il a pris plus de temps qu'il passe à travers chaque page pour trouver le nom NMJava et calcule où il se place au dessus de tous.
Avez-vous envisagé d'utiliser asynchrone URLFetch? Qui va vous permettre de faire toutes les demandes en parallèle.
"asynchrone URLFetch" ? Comment le faire, tout exemple de code ?
code.google.com/appengine/docs/java/javadoc/com/google/...
Oui, je recevais contenu de la page à partir de 6 catégories et de voir où mon NMJava est classé, il a pris plus de temps qu'il passe à travers chaque page pour trouver le nom NMJava et calcule où il se place au dessus de tous.
Avez-vous envisagé d'utiliser asynchrone URLFetch? Qui va vous permettre de faire toutes les demandes en parallèle.
"asynchrone URLFetch" ? Comment le faire, tout exemple de code ?
code.google.com/appengine/docs/java/javadoc/com/google/...
OriginalL'auteur Frank | 2011-09-07
Vous devez vous connecter pour publier un commentaire.
Un DeadlineExceededException est levée lors de votre code, le traitement de la demande de votre application web prend plus de 30 secondes. Sans doute votre code est de prendre un certain temps en raison de la longueur de temps il faut attendre pour recevoir des données à partir d'un autre site.
Vous pouvez créer une tâche sur un la tâche de la file d'attente de récupérer et de traiter ces données, et de changer votre web de demande/réponse de débit pour répondre à la progression de votre tâche.
bon point, je vais modifier ma réponse.
Woo, semble compliqué, tout exemple de code pour ce faire sur Google App Engine site ? Il serait très utile.
Un exemple d'utilisation d'une file d'attente est googcloudlabs.appspot.com/codeLabExercise3.html#TaskQueue
Je tiens à souligner que le délai d'attente par défaut est de 60 secondes: developers.google.com/appengine/docs/...
OriginalL'auteur Stephen Denne
Si votre code est en cours d'exécution à l'intérieur d'un gestionnaire de requêtes, alors par défaut, il est une Application de Moteur de l'exécution de 60 secondes date limite. Vous ne pouvez pas la modifier. Voir les "Délais" ligne /"mise à l'échelle automatique" colonne du tableau sur cette page à la rubrique "mise à l'Échelle des types":
https://developers.google.com/appengine/docs/java/modules/
Toutefois, ce code va être capable de courir pendant quelques heures si vous modifiez votre module à utiliser "mise à l'échelle manuelle" et "B1"-"B4" instance. Exemple:
default/src/main/webapp/WEB-INF/appengine-web.xml:
Sur ce type d'instance, votre demande ne sera généralement pas le temps pendant des heures. (La documentation valoir que la date limite est "indéterminée".)
manual_scaling
et laissez votre service par défaut avecautomatic_scaling
fonctionnalité.OriginalL'auteur Zero Trick Pony