IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

sqlalchemy - Freeze inexpliqué


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Points : 54
    Points
    54
    Par défaut sqlalchemy - Freeze inexpliqué
    Bonjour,

    Sur une base de données Postgre, je dispose de 96 tables ("table1", "table2", "table3", etc) qui contiennent les bâtiments de la BD TOPO de l'IGN, tous départements mélangés. Je voudrais créer un programme python qui, en parcourant chacune de mes tables et en me basant sur le code Insee de chaque département, puisse créer une table par département (avec le nom du département associé au nom de la couche) qui contiendrait les bâtiments de ce derniers ("bati2A", "bati2B", "bati13", etc).

    J'ai été très content d'avoir pu réaliser un programme fonctionnel ... qui malheureusement freeze de manière aléatoire. Voici mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    import pandas as pd
    from sqlalchemy import create_engine
    import time
     
    engine = create_engine('postgresql://postgres:0000@localhost:5432/maison', echo=False)
     
    print("---------EXTRACTION DES DEPARTEMENTS EN LISTE---------")
    le_temps = time.time()
    liste_query = engine.execute("select distinct left(insee_com, 2) from commune order by 1")
    liste_df = pd.DataFrame(liste_query.fetchall())
    liste_df.columns = ["col"]
    liste = liste_df.col.unique()
    print("Terminé en %s secondes" %(round(time.time() - le_temps, 2)))
     
    for i in range(0, len(liste)):
    	le_temps_begin = time.time()
    	print("\n\n----------PREPARATION POUR DEPARTEMENT %s" %liste[i])
    	engine.execute("create table if not exists bati_%s (id text, geom geometry, fid bigint, nature text, usage1 text, usage2 text, leger text, etat text, date_creat text, date_maj text, date_app text, date_conf text, source text, id_source text, prec_plani text, prec_alti text, nb_logts text, nb_etages text, mat_murs text, mat_toits text, hauteur text, z_min_sol text, z_min_toit text, z_max_toit text, z_max_sol text, origin_bat text, app_ff text, insee_com text, surface_m2 numeric, est_intersecte text );" %liste[i])
    	for j in range(1, 96):   #96 CORRESPOND AU NOMBRE DE COUCHES QUI POSSEDENT LES BATIMENTS, TOUS DEPARTEMENTS MELANGES
    		le_temps = time.time()
    		print("\n----------PREPARATION POUR table_%s" %j)
    		engine.execute("insert into bati_%s(id , geom , fid, nature , usage1 , usage2 , leger , etat , date_creat , date_maj , date_app , date_conf , source , id_source , prec_plani , prec_alti , nb_logts , nb_etages , mat_murs , mat_toits , hauteur , z_min_sol , z_min_toit , z_max_toit, z_max_sol , origin_bat , app_ff , insee_com , surface_m2, est_intersecte ) (select id , geom , fid, nature , usage1 , usage2 , leger , etat , date_creat , date_maj , date_app , date_conf , source , id_source , prec_plani , prec_alti , nb_logts , nb_etages , mat_murs , mat_toits , hauteur , z_min_sol , z_min_toit , z_max_toit, z_max_sol , origin_bat , app_ff , insee_com , surface_m2, est_intersecte  from public.table_%s where id not in (select id from bati_%s) and left(insee_com, 2) = '%s')" %(liste[i], j, liste[i], liste[i]))
    		print("Terminé en %s secondes -- ELEMENT NUMERO %s" %(round(time.time() - le_temps, 2), i))
    	print("\n\n--------------------DEPARTEMENT %s TERMINE EN %s SECONDES !!-------------------"%(liste[i], round(time.time() - le_temps_begin, 2)))
    Je n'arrive pas à expliquer ce freeze. Par exemple, j'obtiens le message habituel "PREPARATION POUR table_18" (ligne 22), puis le programme bloque. Est-ce dû au trop grand nombre de requêtes ? Devrais systématiquement fermer la connexion puis la réouvrir ?

    Merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Si vous partez sur l'hypothèse que SQLAlchemy bloque, virez le en faisant directement vos requêtes sur psycopg et vous serez fixé.
    note: vu le code, c'est pas compliqué à faire...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Points : 54
    Points
    54
    Par défaut
    Merci pour votre réponse.

    Effectivement, psycopg semble être un peu plus efficace mais le résultat est le même. Là où sqlalchemy freezait à partir de la création d'une dizaine de tables (encore un fois, de manière aléatoire), psycopg s'est arrêté après une vingtaine de création.

    ... Bizarre.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Essayez de regarder s'il y a des choses dans le log du serveur de la base de données.... quelque part, c'est peut être lui qui s'essoufle.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Probleme de freeze au chargement d'une vidéo
    Par Kill@m@n dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 05/07/2005, 19h15
  2. mon pc freeze
    Par rvdesiles dans le forum Ordinateurs
    Réponses: 26
    Dernier message: 30/04/2005, 12h14
  3. [tomcat] freeze ...
    Par Valerio dans le forum Tomcat et TomEE
    Réponses: 24
    Dernier message: 12/04/2005, 14h39
  4. [TOMCAT] Tomcat "freeze"...
    Par psylo dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 23/06/2004, 13h33
  5. Réponses: 4
    Dernier message: 04/12/2002, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo