2010-09-16 28 views
2

Je prévois d'utiliser l'API TaskQueue de GAE pour actualiser mon cache de pages HTML, que je sauvegarde dans le magasin de données (et memcache, mais le magasin de données est plus fiable).comment puis-je avoir accès à une liste de tâches sur GAE?

Une fois par semaine, j'ajoute/édite des données, et j'ai besoin de régénérer les pages HTML associées, et le déclenchement des tâches est la façon de faire.

Notez que différentes modifications peuvent impliquer la modification de la même page mise en cache. Par exemple, la page d'accueil contient des extraits de plusieurs parties provenant de différentes données. Ce que je veux, c'est lancer des tâches dans la file d'attente avec un délai (en utilisant le compte à rebours d'une heure, par exemple) afin que je puisse accumuler plusieurs modifications, et à la fin, les pages mises en cache ne seront régénérées qu'une seule fois.

Le problème est que je n'ai pas besoin d'ajouter une tâche pour régénérer la page X s'il y a déjà une tâche en file d'attente pour régénérer la page X en une heure. Ainsi, j'ai besoin de vérifier la liste des tâches et de voir s'il y en a déjà une.

Comment puis-je accéder à la liste des tâches?

Répondre

2

J'ai vu que l'ajout de la même tâche soulèverait une erreur DuplicateTaskNameError, c'est peut-être tout ce dont j'ai besoin.

+1

Correct - c'est le but des noms de tâches. Notez que vous devez également attraper un TombstonedTaskNameError, au cas où la tâche aurait déjà été exécutée. –

0

Chaque fois que vous effectuez un montage, vous pouvez simplement supprimer l'élément du cache. Ensuite, quand quelqu'un vient à lire une page, vous remarquerez que ce n'est pas dans le cache et l'extraire du magasin de données à ce moment-là et mettre à jour le cache avec les données nouvellement récupérées. Vous devriez déjà avoir ce genre de logique puisque vous ne pouvez pas toujours garantir que l'élément sera dans le cache. Cela aura un impact sur la vitesse du premier chargement après que vous ayez effectué les mises à jour, mais après cela, tout ira bien.

+0

D'abord, certaines pages sont difficiles à générer, parfois elles dépassent le délai de 30 secondes, il est donc préférable de les rendre hors connexion. Deuxièmement, je peux utiliser le quota pour les octets sur TaskQueue pour m'assurer que mon cache est toujours frais. Mais oui, c'est le comportement par défaut. –