problème a été mis à jour pour inclure les progrès réalisésfond d'exécution de tâche Céleri dans Flask
Je le code suivant et mes tâches de céleri coup d'envoi bien, je ne sais pas où je dois stocker le résultat async si que je peux regarder plus tard
#!/usr/bin/env python
"""Page views."""
from flask import render_template, request
from flask import Flask
from celerytest import add
from time import sleep
app = Flask(__name__)
async_res = []
@app.route('/', methods=['GET', 'POST'])
def run():
if request.method == 'GET':
return render_template("template.html")
else:
form = request.form
n1 = str(form.get("n1"))
n2 = str(form.get("n2"))
aysnc_res = add.delay(n1,n2)
return render_template("loading.html")
@app.route('/loading')
def check_if_complete():
if async_res.ready() == True:
return render_template("template2.html", val=async_res.get())
else:
sleep(5)
return render_template("loading.html")
if __name__ == '__main__':
app.run()
il semble que le stockage async_res
comme une variable globale dans mon application flacon provoque des erreurs de serveur. Alors, quelle est la meilleure méthode de stockage du résultat afin que je puisse vérifier dans ma page « chargement »
En règle générale, vous ne devez pas démarrer un worker Celery depuis l'intérieur de Flask. Vous démarrez le travailleur Celery séparément du démarrage de Flask (voir le [Guide du travailleur] (http://docs.celeryproject.org/en/latest/userguide/workers.html)). Lorsque la tâche est exécutée, vous devez démarrer une tâche comme indiqué dans le [Guide des tâches] (http://docs.celeryproject.org/en/latest/userguide/tasks.html). –
@MarkHildreth qui ne répond que partiellement à ma question sur la façon dont je lance la tâche du céleri, comment puis-je savoir quand il est complet et forcer la page à rendre les résultats? – sedavidw
Vous démarrez une tâche comme indiqué dans le guide des tâches auquel j'ai lié. Vous savez qu'il est complet car votre tâche apporte des modifications au cours de la dernière étape (comme la modification du drapeau d'état d'un enregistrement dans une base de données). Vous pouvez vérifier cet indicateur d'état dans les requêtes Web. Comment forcer la page à recharger est entièrement à vous; il y a beaucoup de manières différentes (dont certaines que j'ai énumérées dans la [réponse précédente] (http://stackoverflow.com/questions/18127128/time-out-issues-with-chrome-and-flask)). Je recommande de jouer avec Celery par lui-même jusqu'à ce que vous compreniez ce qu'il peut faire. –