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 :

Message erreur conversion Cython


Sujet :

Python

  1. #21
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 872
    Billets dans le blog
    1
    Par défaut
    Je répondais à Jurassik, comme le montre le fait que je l'avais cité au préalable
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #22
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 303
    Par défaut
    Citation Envoyé par ceststef Voir le message
    Toujours cet ensemble de messages d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      File "/Users/stef/Desktop/Pronostef/setup.py", line 15, in <module>
        ext_modules = cythonize(extensions),
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 965, in cythonize
        module_list, module_metadata = create_extension_list(
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 815, in create_extension_list
        for file in nonempty(sorted(extended_iglob(filepattern)), "'%s' doesn't match any files" % filepattern):
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 114, in nonempty
        raise ValueError(error_msg)
    ValueError: 'prog_principal.pyx' doesn't match any files
    on dirait que le problème est lié au fichier setup.py , essaie la commande simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cythonize -b -i prog_principal.pyx

  3. #23
    Invité
    Invité(e)
    Par défaut
    Petite question:

    quand ma fonction vise à retourner un tuple de dictionnaires, je la définis bien comme suit pour Cython:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     cpdef (dict, dict, dict, dict) etude_proprietaire_moy_quinte(self, variable1, variable 2 ....): 
     
          .
          .
          .
     
          return dico1, dico2, dico3, dico4
    Parce que la cythonisation me renvoie ceci:


    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
     
    Error compiling Cython file:
    ------------------------------------------------------------
    ...
     
     
     
        #### PROPRIÉTAIRES
        # VALEUR 20
        cpdef (dict, dict, dict, dict) etude_proprietaire_moy_quinte(self, param, choixProno, dico_points_base, dico_points_discipline,dico_points_similaire, dico_points_similaire_inscrits,\
                                      ^
    ------------------------------------------------------------
     
    prog_principal.py:8417:35: Syntax error in simple statement list
    Traceback (most recent call last):
      File "/Users/stef/Desktop/Pronostef 2/setup.py", line 15, in <module>
        ext_modules = cythonize(extensions),
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 1102, in cythonize
        cythonize_one(*args)
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 1225, in cythonize_one
        raise CompileError(None, pyx_file)
    Cython.Compiler.Errors.CompileError: prog_principal.py

    Une autre difficulté que je ne comprends pas, c'est que lorsque je lance une cythonisation avec l'extension .pyx , j'obtiens un message d'erreur:

    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
     
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    from Cython.Distutils import build_ext
     
    # extensions = [ Extension("prog_principal", ["prog_principal.pyx"]) # à renommer selon les besoins
    # ] 
     
    extensions = [
        Extension("prog_principal", ["prog_principal.pyx"])  # à renommer selon les besoins
    ]
     
    setup(
        cmdclass = {'build_ext':build_ext},
        ext_modules = cythonize(extensions),
    )
    donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    python3 setup.py build_ext --inplace
    Traceback (most recent call last):
      File "/Users/stef/Desktop/Pronostef 2/setup.py", line 15, in <module>
        ext_modules = cythonize(extensions),
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 965, in cythonize
        module_list, module_metadata = create_extension_list(
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 815, in create_extension_list
        for file in nonempty(sorted(extended_iglob(filepattern)), "'%s' doesn't match any files" % filepattern):
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 114, in nonempty
        raise ValueError(error_msg)
    ValueError: 'prog_principal.pyx' doesn't match any files
    tandis que si j'utilise:

    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
     
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    from Cython.Distutils import build_ext
     
    # extensions = [ Extension("prog_principal", ["prog_principal.pyx"]) # à renommer selon les besoins
    # ] 
     
    extensions = [
        Extension("prog_principal", ["prog_principal.py"])  # à renommer selon les besoins
    ]
     
    setup(
        cmdclass = {'build_ext':build_ext},
        ext_modules = cythonize(extensions),
    )
    la cythonisation débutera et donnera:


    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
    26
    27
    28
    29
     
     
    python3 setup.py build_ext --inplace
    Compiling prog_principal.py because it changed.
    [1/1] Cythonizing prog_principal.py
    /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /Users/stephanebraem/Desktop/Pronostef 2/prog_principal.py
      tree = Parsing.p_module(s, pxd, full_module_name)
     
    Error compiling Cython file:
    ------------------------------------------------------------
    ...
     
     
     
        #### PROPRIÉTAIRES
        # VALEUR 20
        cpdef (dict, dict, dict, dict) etude_proprietaire_moy_quinte(self, param, choixProno, dico_points_base, dico_points_discipline,dico_points_similaire, dico_points_similaire_inscrits,\
                                      ^
    ------------------------------------------------------------
     
    prog_principal.py:8417:35: Syntax error in simple statement list
    Traceback (most recent call last):
      File "/Users/stef/Desktop/Pronostef 2/setup.py", line 15, in <module>
        ext_modules = cythonize(extensions),
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 1102, in cythonize
        cythonize_one(*args)
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 1225, in cythonize_one
        raise CompileError(None, pyx_file)
    Cython.Compiler.Errors.CompileError: prog_principal.py
    soit mon message d'erreur de tout à l'heure.

    Merci
    Dernière modification par Invité ; 21/11/2021 à 13h20.

  4. #24
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 303
    Par défaut
    hello,
    Citation Envoyé par ceststef Voir le message
    Une autre difficulté que je ne comprends pas, c'est que lorsque je lance une cythonisation avec l'extension .pyx , j'obtiens un message d'erreur:

    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
     
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    from Cython.Distutils import build_ext
     
    # extensions = [ Extension("prog_principal", ["prog_principal.pyx"]) # à renommer selon les besoins
    # ] 
     
    extensions = [
        Extension("prog_principal", ["prog_principal.pyx"])  # à renommer selon les besoins
    ]
     
    setup(
        cmdclass = {'build_ext':build_ext},
        ext_modules = cythonize(extensions),
    )
    donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    python3 setup.py build_ext --inplace
    Traceback (most recent call last):
      File "/Users/stef/Desktop/Pronostef 2/setup.py", line 15, in <module>
        ext_modules = cythonize(extensions),
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 965, in cythonize
        module_list, module_metadata = create_extension_list(
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 815, in create_extension_list
        for file in nonempty(sorted(extended_iglob(filepattern)), "'%s' doesn't match any files" % filepattern):
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 114, in nonempty
        raise ValueError(error_msg)
    ValueError: 'prog_principal.pyx' doesn't match any files
    tandis que si j'utilise:

    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
     
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    from Cython.Distutils import build_ext
     
    # extensions = [ Extension("prog_principal", ["prog_principal.pyx"]) # à renommer selon les besoins
    # ] 
     
    extensions = [
        Extension("prog_principal", ["prog_principal.py"])  # à renommer selon les besoins
    ]
     
    setup(
        cmdclass = {'build_ext':build_ext},
        ext_modules = cythonize(extensions),
    )
    la cythonisation débutera et donnera:


    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
    26
    27
    28
    29
     
     
    python3 setup.py build_ext --inplace
    Compiling prog_principal.py because it changed.
    [1/1] Cythonizing prog_principal.py
    /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /Users/stephanebraem/Desktop/Pronostef 2/prog_principal.py
      tree = Parsing.p_module(s, pxd, full_module_name)
     
    Error compiling Cython file:
    ------------------------------------------------------------
    ...
     
     
     
        #### PROPRIÉTAIRES
        # VALEUR 20
        cpdef (dict, dict, dict, dict) etude_proprietaire_moy_quinte(self, param, choixProno, dico_points_base, dico_points_discipline,dico_points_similaire, dico_points_similaire_inscrits,\
                                      ^
    ------------------------------------------------------------
     
    prog_principal.py:8417:35: Syntax error in simple statement list
    Traceback (most recent call last):
      File "/Users/stef/Desktop/Pronostef 2/setup.py", line 15, in <module>
        ext_modules = cythonize(extensions),
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 1102, in cythonize
        cythonize_one(*args)
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 1225, in cythonize_one
        raise CompileError(None, pyx_file)
    Cython.Compiler.Errors.CompileError: prog_principal.py
    soit mon message d'erreur de tout à l'heure.

    Merci
    il me semble qu'avec l'extension py , le fichier est considéré comme un script python et python ne comprend pas les syntaxes avec cpdef, cdef
    et pour le premier problème il faudrait commencer doucement avec des cas de variables simples et avec la remarque à Tyrtamos :
    Quant à gagner du temps d'exécution avec la compilation par cython, attention à un détail: on gagne vraiment du temps lorsque le type des variables python passées au code C ou C++, existe en C ou C++! Sinon, le code compilé devra appeler l'API Python souvent, et le gain de temps ne sera pas présent, et même pourra être moins bon qu'avec le Python pur (ça m'est déjà arrivé).
    J'ai vu également des requêtes SQL dans ton code . Avec un profiler il faudrait savoir exactement où est perdu le temps : parce qu'il y a beaucoup de boucles ? parce qu'il y a une fonction lente dans la boucle ? etc ... ?

    Ami calmant, J.P

  5. #25
    Invité
    Invité(e)
    Par défaut
    J'ai isolé la partie que je souhaité accélérer donc en plaçant celle-ci dans une fonction, dans un module.

    Je n'arrive toujours pas à cythoniser cette fonction.

    Le terminal me retourne toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ValueError: 'module_moyProprioFct.pyx' doesn't match any files
    alors que module_moyProprioFct.pyx est bel et bien présent dans mon dossier
    et que mon setup.py est comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    from Cython.Distutils import build_ext
     
    extensions = [
        Extension("module_moyProprioFct", ["module_moyProprioFct.pyx"])  
     
    setup(
        cmdclass = {'build_ext':build_ext},
        ext_modules = cythonize(extensions),
    )


    Je ne pige pas d'où vient le pb.

  6. #26
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 303
    Par défaut
    hello,
    Citation Envoyé par ceststef Voir le message
    J'ai isolé la partie que je souhaité accélérer donc en plaçant celle-ci dans une fonction, dans un module.

    Je n'arrive toujours pas à cythoniser cette fonction.

    Le terminal me retourne toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ValueError: 'module_moyProprioFct.pyx' doesn't match any files
    alors que module_moyProprioFct.pyx est bel et bien présent dans mon dossier


    Je ne pige pas d'où vient le pb.
    comme on peut le constater dans les traces d'erreur le problème provient de cette ligne dans le fichier Dependencies.py de Cython
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for file in nonempty(sorted(extended_iglob(filepattern)), "'%s' doesn't match any files" % filepattern):
    si on regarde ce que fait nonempty il vérifie que le pattern correspond à un ou des fichiers existants (si il y a un joker comme *).
    normalement cela devrait marcher pour toi car le fichier module_moyProprioFct.pyx (qui s'affiche d'ailleurs dans le message d'erreur) existe.
    Si il y a un problème c'est certainement dans la fonction extended_iglob de Dependencies.py à cet endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        else:
            for path in iglob(pattern):
                yield path
    avec un iglob(pattern) qui ne contient rien. Mais cela reste des suppositions. Le mieux serait de faire un point d'arrêt sur la ligne en erreur et de voir ce qui se passe en descendant dans les fonctions appelées dans la ligne. Chez moi il n'y a pas d'erreur.
    Peut être un souci avec les chemins utilisés pour ton code source.

    Ami calmant, J.P

  7. #27
    Invité
    Invité(e)
    Par défaut
    Je pense que je peux éliminer le soucis avec mon chemin d'accès car si je cythonise de façon minimaliste c'est à dire en laissant Cython faire le travail sur mon module laissé en python pur et nommé .py, la cythonisation fonctionne. J'obtiens fichiers .c et .so. Et le code fonctionne et s'accélère (pas encore assez à mon goût), j'ai vérifié en le mesurant avec perf_counter()

  8. #28
    Invité
    Invité(e)
    Par défaut
    @jurassic pork

    Ton intuition était la bonne.

    Cython indiquait que le fichier était inexistant.
    En réalité, quand je renommais le fichier en .pyx, il apparaissait effectivement renommée dans le dossier mais quand j'ai fait 'obtenir les informations' sur ce même fichier,
    j'ai constaté qu'il était toujours de type 'script python' avec toujours un .py de sorte que le dossier portait ce type de nom 'module_moyProprioFct.pyx.py'

    La procédure ne pouvait dès lors que planter.

    Par contre, niveau gain de vitesse, c'est pas folichon. Je pense que ce sont mes requêtes répétées à sqlite qui freinent pas mal.
    N'y aurait il pas un moyen de les accélérer ?
    Dernière modification par Invité ; 23/11/2021 à 15h38.

  9. #29
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 303
    Par défaut
    hello,
    peux-tu nous donner quelques informations concernant les performances:
    ex : temps d'exécution
    temps espéré.
    Nombre de requêtes sql effectuées dans l'exécution.
    Nombre d'éléments dans la base de données.
    etc..
    Ami calmant, J.P

  10. #30
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par ceststef Voir le message
    Par contre, niveau gain de vitesse, c'est pas folichon. Je pense que ce sont mes requêtes répétées à sqlite qui freinent pas mal.
    N'y aurait il pas un moyen de les accélérer ?
    Une entrée sortie disque est 1000 fois plus lente qu'un accès mémoire.
    Et le seul moyen d'accélérer la vitesse des entrées sorties sera d'en faire moins.

    Ce qui me turlupine dans votre affaire, c'est le nombre de lignes de code que vous voulez compiler (20000). Bien qu'on ne mesure plus la productivité d'un programmeur aux nombres de lignes qu'il écrit, l'ordre de grandeur reste entre 50 et 100 lignes/jour...

    Et une indication de 200 à 400 jours de boulot pour écrire toutes ces lignes.

    Si vous n'avez pas passé ce temps à écrire votre code, l'optimiser, c'est d'abord retravailler du côté structures de données/algorithmes/séquences de traitements à défaut de l'avoir fait à l'étape de conception...).

    Ce n'est qu'après avoir fait ce boulot qu'on identifie les traitements qui pourraient mériter d'être "compilés" (à défaut de pouvoir être repensés côté algo.).

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

  11. #31
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ce qui me turlupine dans votre affaire, c'est le nombre de lignes de code que vous voulez compiler (20000). Bien qu'on ne mesure plus la productivité d'un programmeur aux nombres de lignes qu'il écrit, l'ordre de grandeur reste entre 50 et 100 lignes/jour...

    - W
    Il y a maintenant 2 ans, je débutais et découvrais : print('Hello world !')

    Aujourd'hui, je discute dans un post avec 3 généraux 5 étoiles sur le forum informatique. Ça vous donne une idée du chemin parcouru.

    Donc 50/100 lignes jour, ce n'est par mon rythme bien que je m'y attèle tous les jours mais je le fais à temps perdu bien que ce soit devenu un hobbies très très prenant car ça me plait.

    Alors, mon programme n'est pas parfait (un peu d'indulgence, je viens de loin) - je suis le premier à indiquer que je vais l'améliorer (cf mon indication sur la longueur des noms de variables) . J'ai tout mon temps pour cela.

    Comme j'ai bien compris que 20000 lignes à cythoniser, c'était trop, j'ai isolé dans une fonction la partie de code à cythoniser, ce qui a fonctionné. Mais comme je ne voyais pas une nette différence, j'ai demandé à ce forum s'il était possible d'accélérer mes requêtes sqlite.

    J'ai très bien compris que lorsque mon code sera optimisé avec des algorithmes ciselés, la cythonisation sera l'ultime catalyseur à mon code mais je voulais tenter la cythonisation, pour voir.

    Maintenant, je reviens sur le sujet des select sqlite.

    J'ai lu sur ce forum qu'il était possible d'effectuer des insertions multiples de cette façon semble-t-il:

    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
     
     
     
    c.execute('BEGIN']
    for ...:
       c.execute('INSERT INTO mots VALUES (?, ?)',[nMot, j])
       c.execute('INSERT INTO phrases VALUES (?, ?)',[i, nMot])
     
       # Pour par exemple commiter toutes les 50 000 lignes.
       if nb == 50000:
          c.execute('END']
          conn.commit()
          c.execute('BEGIN']
     
    conn.commit()
    Alors je me demandais si, sur le plan de la comparaison, il était possible de faire la même chose non pas en INSERT mais en SELECT ? (mais je crois que je vais être invité à changer de sujet sur ce forum )

  12. #32
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par ceststef Voir le message
    Alors je me demandais si, sur le plan de la comparaison, il était possible de faire la même chose non pas en INSERT mais en SELECT ?
    Si on écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      c.execute('INSERT INTO mots VALUES (?, ?)',[nMot, j])
       c.execute('INSERT INTO phrases VALUES (?, ?)',[i, nMot])
    on exécute 2 requêtes SQL (l'une après l'autre) et qu'il s'agisse de requête INSERT/SELECT/UPDATE, ... çà fera toujours 2 requêtes.
    Par contre dans le cas des INSERT, on gagnerait peut être à faire des bulk insert (.executemany) dans chaque table.

    Citation Envoyé par ceststef Voir le message
    Alors, mon programme n'est pas parfait (un peu d'indulgence, je viens de loin) - je suis le premier à indiquer que je vais l'améliorer (cf mon indication sur la longueur des noms de variables) . J'ai tout mon temps pour cela.
    Pour revenir à la productivité du programmeur, elle est "faible" car il passe 70% du temps à concevoir et lire les documentations pour arriver à maîtriser ce qu'il va coder.

    Il est manifeste que vous n'avez pas trop passé de temps à maîtriser cython ou sqlite avant de vous jeter à l'eau... C'est bien mais c'est discutable lorsqu'on écrit un gros programme et qu'on cherche à améliorer ses performances.

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

  13. #33
    Invité
    Invité(e)
    Par défaut
    Ce qui est manifeste, c'est que vous amalgamez forum et tribunal.
    Vous n'êtes pas là pour voir le temps que j'ai pu passer à consulter la documentation.

    C'est vrai que nous sommes dans le domaine de la programmation et je n'aurais pas pensé à consulter le web ou de la doc pour trouver réponse.

    Clairement, les débutants vous posent des questions que vous devez estimer indigne de votre niveau
    et je m'étonne de ne pas avoir lu votre phrase favorite (car j'ai lu plus d'une de vos publications):

    "il y a des tutos pour ça".

    J'ai pas fait tant de cinéma quand je vous ai repris sur une simple addition par le passé.

    Quand on vient sur une forum, c'est pour avoir des réponses à une difficulté, pas pour recevoir un jugement de valeur.

    Bon, vous m'avez convaincu car malheureusement à chaque fois je tombe sur vous, c'est décidé, je change de crémerie.

    Je vais rester calme mais sachez que je vous donnerai la leçon dans bien des domaines autres que l'informatique .

    Ingénieur ne veut vraiment pas dire génial. Loin de là.

    Ciao pantin. (en plus vous avez répondu à côté de ma question, une fois de plus).

  14. #34
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par ceststef Voir le message
    Quand on vient sur une forum, c'est pour avoir des réponses à une difficulté, pas pour recevoir un jugement de valeur.
    Il n'y a pas de réponses à vos difficultés car vous posez des questions sans contexte auxquelles on ne peut répondre qu'en vous renvoyant à la documentation.

    Citation Envoyé par ceststef Voir le message
    Clairement, les débutants vous posent des questions que vous devez estimer indigne de votre niveau
    Si vous avez commencé à jouer avec Python, il y a 2 ans et écrit 20000 de code, vous n'êtes plus débutant! Et si vous n'êtes plus débutant, çà veut dire que vous avez pris le temps de lire un peu la documentation, enrichir votre vocabulaire technique pour décrire les problèmes rencontrés, ...

    Relisez votre dernière question:

    J'ai lu sur ce forum qu'il était possible d'effectuer des insertions multiples de cette façon semble-t-il:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    c.execute('BEGIN']
    for ...:
       c.execute('INSERT INTO mots VALUES (?, ?)',[nMot, j])
       c.execute('INSERT INTO phrases VALUES (?, ?)',[i, nMot])
     
       # Pour par exemple commiter toutes les 50 000 lignes.
       if nb == 50000:
          c.execute('END']
          conn.commit()
          c.execute('BEGIN']
     
    conn.commit()
    Alors je me demandais si, sur le plan de la comparaison, il était possible de faire la même chose non pas en INSERT mais en SELECT ? (mais je crois que je vais être invité à changer de sujet sur ce forum )
    Vous montrez une transaction qui s'assure que les 2 INSERT seront soit effectués complètement soit défaits (pour assurer l'intégrité de la base).
    SELECT se contente de lire, pas besoin d'un contexte de transaction pour en faire plusieurs à la suite.

    Que reste-t-il se sensé? La séquence des 2 .execute et la phrase "commiter toutes les 50 000 lignes", où j'essaie de vous expliquer que les bulk insert seraient bien plus efficace (et vous indiquer .executemany).

    Citation Envoyé par ceststef Voir le message
    Quand on vient sur une forum, c'est pour avoir des réponses à une difficulté, pas pour recevoir un jugement de valeur.
    Ce n'est pas vous que je juge, je ne vous connais pas. Juste le travail que vous présentez... et si je pense que vous pourriez mieux faire en vous documentant, je ne vois pas pourquoi je ne le dirai pas.
    Pour moi 70% du temps passé par un programmeur est dans la documentation et les petits tests pour s'assurer qu'on a compris sinon que çà fera ce qu'on attend. Vous suggérer d'ouvrir une documentation, de ne pas vous lancer dans des projets trop ambitieux trop tôt,... n'a rien de péjoratif: c'est juste du bon sens.

    Si vous venez dans le coin, c'est pour essayer de vous améliorer pas pour avoir des trucs prêts à emporter... et zapper l'effort d'apprentissage.

    Citation Envoyé par ceststef Voir le message
    J'ai pas fait tant de cinéma quand je vous ai repris sur une simple addition par le passé.
    Tous les humains peuvent se tromper.

    Maintenant ne pas prendre le temps de se perfectionner et de s'équiper avant de se lancer dans l'escalade de l'Himalaya, n'est pas une erreur, c'est juste mal apprécier les moyens à se donner pour réaliser ses ambitions.... et mettre en danger la vie des secours de haute montagne parce qu'on fait son caprice.

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

  15. #35
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    SELECT se contente de lire, pas besoin d'un contexte de transaction pour en faire plusieurs à la suite.


    - W
    C'est tout ce que je voulais savoir.


    C'est bien ce que je pensais. Vous mélangez forum et défouloir.
    Je ferme mon compte. Merci quand même.

Discussions similaires

  1. Message erreur InterBase
    Par tchaman dans le forum InterBase
    Réponses: 9
    Dernier message: 01/04/2005, 16h50
  2. [g++] message erreur etrange
    Par infotron dans le forum Autres éditeurs
    Réponses: 15
    Dernier message: 20/09/2004, 00h14
  3. [FLASH MX 2004] message erreur de classe
    Par matN59 dans le forum Flash
    Réponses: 3
    Dernier message: 14/06/2004, 09h59
  4. [VB.NET] Erreur conversion de code c=>vb (opendialogfile)
    Par hirochirak dans le forum Windows Forms
    Réponses: 19
    Dernier message: 02/06/2004, 17h31
  5. [Kylix] message erreur à l'ex
    Par JlouisI dans le forum EDI
    Réponses: 5
    Dernier message: 08/03/2003, 18h47

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