J'ai la nécessité de lancer un processus de longue durée en réponse à une demande de formulaire dans django. Ensuite, j'aimerais pouvoir interroger en utilisant ajax et faire en sorte que la vue réponde à l'état du processus (démarré, arrêté ou en cours d'exécution). De plus, je veux être en mesure d'arrêter le processus.état global du processus de longue durée dans django
donc mon point de vue ressemble à ceci:
def start()
. . .
def stop()
. . .
def status()
. . .
Cette question particulière a été abordée à plusieurs reprises sur le SO, mais ma situation est légèrement différente: Je cherche une solution qui est tout à fait pythonique, n'a pas exiger tout ce qui ne se trouve pas dans stock django, et ne nécessite pas l'utilisation d'une base de données.
La chose la plus proche que j'ai trouvé est this post. J'ai implémenté le code, et l'ai simplifié un peu, mais il s'avère que request.session n'est pas global (deux navigateurs ont des sessions différentes).
Il pourrait être que mon problème pourrait être résolu en utilisant autre chose que request.session pour sauver l'état de marche/arrêt/statut, mais je ne sais pas ce que ce serait.
Une autre possibilité, je suis tombé dans ma lecture est middleware django, mais selon this,
__init __() est appelée une seule fois - au démarrage du serveur - pas pour demandes individuelles
Il y a aussi un billet de blog here qui parle de l'état global dans django. Des pensées?
Donc le problème avec ce que @jetxee a posté est que vous voulez que quelqu'un (indépendamment de qui a commencé la tâche de longue durée) soit capable de vérifier la progression de cette tâche? –
Oui, c'est exactement ça. – g33kz0r
Si vous dites "ne nécessite pas quelque chose ne trouve pas en stock django", puis dites "ne nécessite pas l'utilisation d'une base de données." vous avez pris un gros morceau de stock django hors de l'équation, étant donné le couplage de Django à sa base de données. Attention à nous éclairer pourquoi? – Spacedman