2

Je veux faire une application Google App Engine qui effectue les opérations suivantes:Threads Python (ou leur équivalent) sur Google Application Engine Solution de contournement?

  1. client fait une demande asynchrone http
  2. Server démarre le traitement qui demandent
  3. client fait la demande http ajax pour obtenir des progrès

Le problème est que le traitement du serveur (étape 2) peut prendre plus de 30 secondes.

Je sais que vous ne pouvez pas avoir de threads sur Google Application Engine et que toutes les tâches doivent être terminées dans les 30 secondes, sinon elles seront arrêtées. Y a-t-il un moyen de contourner ce problème?

En outre, j'utilise python-django comme backend.

Répondre

4

Vous devez utiliser l'API Task Queue, probablement via deferred tasks. L'API deferred simplifie énormément le travail avec les files d'attente de tâches. Essentiellement, vous aurez besoin de générer une tâche pour démarrer le traitement. Cette tâche doit capturer les exceptions DeadlineExceeded et se replanifier (à nouveau via l'API deferred) pour continuer le traitement. Cela nécessite que vos tâches soient en mesure de suivre leurs propres progrès. Ils peuvent également mettre à jour leur propre statut dans memcache, que vous pouvez utiliser pour écrire une vue qui vérifie l'état d'une tâche. Cette vue peut ensuite être interrogée via Ajax.