Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Requetes Django en parallèle

+2 votes

J'ai une appli Django qui fait une requete Ajax assez longue a chaque clic sur un < input > (je simplifie). Quand on clique plusieurs fois, ça envoie plusieurs requêtes, mais à la queue : chacune attend que la précédente finisse. Je voudrais qu'elles s'exécutent en parallèle. Est-ce que c'est possible ?

En fait quand on appuie sur l'input, je dis à Ajax d'annuler les requêtes précédentes, et j'attends seulement la réponse de la dernière, car j'ai lu qu'il était très compliqué de tuer un processus déjà lancé du côté serveur. C'est pourquoi j'ai besoin que les requêtes inutiles ne freinent pas la dernière. Mais si vous savez comment tuer un processus déjà lancé avec Django, c'est encore mieux !

P.S. Quand j'envoie ma question ça me dit "Votre question sera vérifié et approuvé prochainement.". Il manque le "e" du féminin à vérifié et approuvé.

demandé 23-Jul-2015 par muraveill (146 points)
edité 23-Jul-2015 par max

on fait pas du support de " l'outil ", vaut mieux soumettre ça toi même aux auteurs à la rigueur :)

ensuite concernant "on me dit que x est mieux que y" ; vaut mieux eviter ça ici ; le troll ca fini toujours mal.

si tu veux de l'aide sur ce que tu utilises, evites la comparaison avec un autre langage qui le fait deja et mieux etc.

my 2 coins

Edité. Mais je ne sais pas si S...a le fait et mieux. Ce que je voudrais savoir c'est si je suis en train d'utiliser le bon outil vu les besoins que j'ai pour mon appli.

As-Tu pensé à faire un système de queues avec une lib dans le genre: http://python-rq.org/docs/ ?

Tu balance toutes tes requêtes dans la queue qui va les traiter ensuite, tu n'auras plus à t'en soucier car RQ va les stocker dans une queue et les exécuter au fur et à mesure laissant ton process principal "saint".

Exactement la meme requete ou bien des requetes differentes? (parametres differents, urls differentes) Pourquoi en parrallele si a la fin, ce qui t'interesse, c'est la reponse a la derniere requete envoyée? Chohmezeucode

C'est égal, l'essentiel c'est que la dernière requête lancée détermine le contenu de ma page, et toutes les précédentes deviennent superflues. Alors je ne veux pas attendre que les autres finissent avant d'afficher le contenu le plus récent. En parallèle, car je ne trouve pas le moyen de les supprimer complètement.
En fait je me dis maintenant que le problème serait au niveau de mod_wsgi (configuration ?).

J'ai du mal comprendre la question...

Et Gunicorn alors ? avec plein de workers. Le principe des workers c'est de pas bloquer ton app. donc si tes requetes précédentes bloquent l'app, un nouveau worker sera utilisé pour ta requete importante (sous condition d'avoir des workers de dispo).

http://mathieu.agopian.info/blog/gunicorn-un-server-wsgi-ultra-simple-a-utiliser-et-configurer.html

J'allais justement parler des workers avec gunicorn, avec uwsgi, avec nginx, bref, le probleme n'est pas a resoudre au niveau de django a mon avis.

Je n'ai pas du tout compris la question. Qu'est-ce qui est en prod ? Qu'est-ce qui marche ? Qu'est-ce qui ne marche pas ?

Pardon j'avais oublié ce fil. En prod il y a Apache avec modwsgi, et je n'arrivais pas à le faire utiliser plus d'un CPU même avec plusieurs requêtes simultanées. Mais je crois que j'ai réussi : il faut changer le nombre de workers wsgi dans httpd.conf. Dans mon cas c'est une variable WSGIMULTIPROCESSING qu'il faut setter car il y a un "ifDefined ... workers=1". Aucun rapport avec Django, donc. Mais je débute...

Super, écrit ta solution en tant que réponse à ta question, et je la valide, comme ça si quelqu'un passe par là il a cette info bien visible.

1 Réponse

+3 votes
 
Meilleure réponse

Je crois que j'ai réussi : il faut changer le nombre de workers wsgi dans httpd.conf. Dans mon cas c'est une variable WSGI_MULTIPROCESSING qu'il faut setter car il y a un "ifDefined(WSGI_MULTIPROCESSING) ... workers=1". Aucun rapport avec Django, donc.

répondu 2-Aou-2015 par muraveill (146 points)
sélectionné 3-Aou-2015 par muraveill
...