Django post est-il asynchrone?
j'ai une fonction "j'aime" qui est comme les réseaux sociaux aiment ou thumbs up fonction; l'utilisateur clique sur l'étoile / cœur / n'importe quoi pour marquer le contenu comme aimé. Il est fait avec ajax et doit être rapide. Le seul problème ici, c'est que pour certaines raisons, je dois faire certaines tâches pour chaque "j'aime" et j'ai découvert qu'ils ont été codés directement dans la vue "j'aime" et cela le rend lent. Je pense utiliser des signaux pour rendre l'exécution de ces tâches asynchrones afin que la vue puisse renvoyer le json directement au javascript sans attendre la fin des tâches. J'ai commencé par créer un signal pour les "j'aime" mais j'ai réalisé que les signaux de Django n'étaient pas asynchrones et qu'ils finiraient par être les mêmes, la vue devrait attendre que le signal se termine pour renvoyer sa réponse. Donc je pourrais essayer de rendre ce signal asynchrone comme il est expliqué ici et là mais je ferais aussi bien d'utiliser le signal post_save pour le Modèle 'like' mais maintenant je me demande si la vue peut finir avant que le signal ne soit reçu exécuté?
4 réponses
ce que vous voulez est un fil. Elles sont très faciles à utiliser. Vous venez de la sous-classe threading.Thread
et écrire un run
méthode:
import threading
class LikeThread(threading.Thread):
def __init__(self, user, liked, **kwargs):
self.user = user
self.liked = liked
super(LikeThread, self).__init__(**kwargs)
def run(self):
# long running code here
Puis, quand vous êtes prêt à faire la tâche, vous déclencher avec:
LikeThread(request.user, something).start()
le reste de votre code de vue ou ce qui va reprendre et retourner la réponse, et le thread fera avec plaisir son travail jusqu'à ce qu'il soit fait et puis se terminera.
http://docs.python.org/library/threading.html