2009-07-18 3 views
0

Disons que j'avais plus de 10 000 flux que je voulais chercher/analyser périodiquement. Si la période était de 1h, ce serait 24x10000 = 240 000 fetchs.en utilisant des files d'attente de tâches pour planifier l'extraction/l'analyse d'un certain nombre de flux dans appengine python

La limite actuelle de 10k de l'API labs taskqueue empêcherait l'un de de définir une tâche par récupération. Comment alors ferait-on cela?

Mise à jour: re: récupération nur par tâche: étant donné le délai de 30 secondes par demande à un moment donné, cela atteindrait un plafond. existe-t-il de toute façon pour le paralelliser de sorte que chaque tasqueue initie un tas de récupérations parallèles asynchrones dont chacune prendrait moins de 30 secondes pour terminer, mais le lot pourrait prendre plus de

Répondre

2

2 extractions par tâche? 3?

0

Groupez les extractions, donc au lieu de mettre en file d'attente 1, vous allez en file d'attente, par exemple, une unité de travail qui effectue 10 extractions.

+0

veuillez voir la mise à jour à la question. – molicule

3

est ici l'API asynchrone urlfetch:

http://code.google.com/appengine/docs/python/urlfetch/asynchronousrequests.html

ensemble d'un tas de demandes avec un délai raisonnable (vous donner une certaine marge sous votre délai d'attente, de sorte que si une demande expire vous avez encore le temps de traiter les autres). Ensuite, attendez chacun tour à tour et traitez-les à mesure qu'ils se terminent.

Je n'ai pas utilisé cette technique moi-même dans GAE, vous êtes donc seul à trouver des pièges non évidents. Malheureusement, il ne semble pas y avoir d'appel de style select() dans l'API pour attendre la fin de la première de plusieurs demandes.

+0

Donc, si je lis correctement les documents asynchrones, après le lancement et la fermeture d'un groupe de rpc avec for rpc in rpcs: rpc.wait(), la file d'attente des tâches d'origine retourne (satisfaisant le délai de 30s pour les appels http). Les urlfetches asynchrones fonctionnent cependant (sans tête) et elles sont traitées par le rappel associé. Est-ce correct?? – molicule

+0

Non, wait() appelle le rappel avant son retour. –

Questions connexes