Je connais pas PostGis, mais je suppose que
Ca te fait un prepared statement lors de l’instanciation de v, mais à ce moment là la requete n’est pas éxécutée.
Quand tu accèdes pour la première fois à ta ressource (ton instance v) la requête postgresql est exécutée. Ce qui est bizarre c’est que print(v[156].distance) mette ensuite 15sec. Cela voudrait dire qu’une requete spécifique est réalisée pour accéder à cet élément. Marc va me corriger sur le python, mais je pense qu’à chaque accès à une donnée de ta liste v, tu crées une nouvelle instance d’un objet postgis ou que sais-je (ton v[156] ou tous les tmp dans la boucle) et qu’à chaque fois une requete est exécutée (on a les mêmes problèmes avec des couches d’abstractions de bdd en php comme doctrine ou propel)
Tu pourrais sniffer ce qu’il se passe entre ta base postgresql et ton programme avec un bon vieux
tcpdump -Xvv port "portdelabdd"
, ou débugger chaque requete sql depuis python et ainsi voir exactement quelles requetes sont exécutées et à quel moment. Y’a pas moyen de construire ton v comme une liste imbriquée de données ou alors une liste avec des dictionnaires imbriqués et non pas une liste d’objets postgis, comme ça a l’air d’être le cas (puisque distance est un membre de l’instance v[156] dans l’exemple) ? Ca te ferait une bonne grosse liste en mémoire (quoique 2476 éléments y’a pire…) mais une seule requête initiale (ça fait un bail que j’ai fait ni python ni sql hein, pas tapper
)
). Mais on va forcement perdre des donnees dans l’affaire.
