Je travaille sur une application Django qui permet à un utilisateur de télécharger des fichiers. J'ai besoin d'effectuer un traitement côté serveur sur ces fichiers avant de les envoyer à Amazon S3 . Après avoir lu les réponses à cette question y cet article de blog J'ai décidé que la meilleure façon de gérer ce problème était de demander à mon gestionnaire de vue d'invoquer une méthode sur Pyro pour effectuer le traitement de manière asynchrone et renvoyer immédiatement un Http 200 au client. J'ai prototypé cela et cela semble bien fonctionner, cependant, j'aimerais également stocker l'état du traitement afin que le client puisse interroger l'application pour voir si le fichier a été traité et téléchargé sur S3.
Je peux gérer l'interrogation assez facilement, mais je ne suis pas sûr de l'endroit approprié pour stocker l'état du processus. Il doit pouvoir être écrit par le processus Pyro et lu par ma vue d'interrogation.
- J'hésite à ajouter des colonnes à la base de données pour des données qui ne devraient persister que pendant 30 à 60 secondes.
- J'ai envisagé d'utiliser la fonction API de cache de bas niveau et l'utilisation d'un identifiant de fichier comme clé, mais je ne crois pas que ce soit vraiment ce pour quoi le cadre de cache est conçu et je ne suis pas sûr des problèmes imprévus qui pourraient survenir en suivant cette voie.
- Enfin, j'ai envisagé de stocker l'état dans l'objet Pyro qui effectue le traitement, mais il semble que je doive ajouter une colonne de base de données booléenne "processing_complete" pour que la vue sache si elle doit ou non interroger l'état de l'objet Pyro.
Bien entendu, le découplage de l'état de la base de données pose également des problèmes d'intégrité des données (que se passe-t-il si le serveur tombe en panne et que toutes les données sont en mémoire ?) J'aimerais savoir comment des développeurs d'applications web plus expérimentés gèreraient ce type de traitement avec état.