Nous utilisons django-celery pour l'application. J'ai un doute concernant le flux de travail que nous suivons.
Actuellement, lorsqu'un utilisateur clique sur un lien, une tâche est mise en file d'attente à l'aide du code suivant
result=retrieveDatausingWorker.apply_async(args=[type,dictParamList])
Ensuite, la vue renvoie une page qui affiche un message d'attente à l'utilisateur. Cette page renvoie également l'identifiant de la tâche en cours. Puis, en utilisant un appel ajax qui envoie l'identifiant de la tâche au serveur, je vérifie l'état de la tâche actuellement en file d'attente.
code
def getDocketDownloaderWorkerStatus(request):
if request.method=="POST":
task_id=request.POST.get('task_id')
result = AsyncResult(task_id)
if result:
state, retval = result.state, result.result
response_data = dict(id=task_id, status=state, result=safe_str(retval))
if (state=='SUCCESS' or state=='FAILURE') and ('task_id' in request.session):
del request.session['task_id']
return HttpResponse(serialize(response_data), mimetype="application/json")
Cette fonction ajax sera appelée toutes les 5 secondes jusqu'à ce que le serveur renvoie le statut=='SUCCESS' avec le résultat.
Est-ce la bonne façon de faire ? Ou est-ce que cela coûte cher d'utiliser result = AsyncResult(task_id)
J'utilise la base de données comme courtier. La base de données est hébergée dans xeround cloud database. Lorsque je lance un travailleur, l'utilisation du CPU dépasse 95% et nous recevons un message d'erreur critique à ce sujet.