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 :

Problème avec le module multiprocessing [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Problème avec le module multiprocessing
    Bonjour,

    Je réalise un projet de machine learning dans lequel j’emploie des forêts aléatoires (c'est un modèle d'apprentissage automatique). Pour accélérer mon programme, puisque la création d'arbre décisionnel peut totalement se faire en parallèle j'ai essayé d'employer le module multiprocessing.
    Cependant lorsque je fais tourner ma fonction les messages d'erreur suivant apparaissent :
    ModuleNotFoundError: No module named 'ForetClasse'
    BrokenPipeError: [Errno 32] Broken pipe
    J'ai un fichier ForetClasse.py dans lequel se trouve mes fonctions et voici le code qui est censé exécuter ces fonctions dans plusieurs processus :
    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
    from os import chdir
    from multiprocessing import Process, Queue
    import time
    chdir('C:\\Users\\rauli\\Desktop\\TIPE')
    import ForetClasse
     
    def ForetMultiprocess(data, Num_process, population, profondeur, taillemin, arg):
        if __name__ == '__main__':
            q = Queue()
            start_time = time.time()
            foret= []
            echantillons = ForetClasse.bagging(data,population)
            n = len(echantillons)
            for k in range(Num_process):
                process = Process(target = ForetClasse.jardinage, args =(q, echantillons[k*n//Num_process:(k+1)*n//Num_process], 20, 5, 2))
                process.start()
            while q.qsize()<population:
                time.sleep(2)
            return q
    J'ai pourtant bien spécifié l'accès à mon fichier, et j'ai aussi inscrit if __name__ == '__main__' (bien que je n'ai pas compris à quoi cela sert concrètement)
    Je pourrais vous donner mon fichier ForetClasse.py si vous voulez, mais je doute que l'erreur provienne du fichier d'après les messages d'erreur.

    Merci beaucoup de votre aide

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ton message d'erreur ne vient pas de l'import. Ce devrait être ImportError dans ce cas.

    Il faut donc donner le traceback complet de l'erreur qui contient le numéro de ligne incriminée.

    Autres remarques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chdir('C:\\Users\\rauli\\Desktop\\TIPE')
    ceci me semble une fausse bonne idée.

    Et ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echantillons = ForetClasse.bagging(data,population)
    tu ne dois pas instancier ta classe ForetClasse d'abord ? Pas obligé mais j'invite à la réflexion.

    Et encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    process = Process(target = ForetClasse.jardinage, args =(...
    s'agit-il toujours de ton ForetClasse.py ? Si oui, Que veux-tu réellement faire ?
    Fort possible que ce soit d'ailleurs la cause de ton message d'erreur.

  3. #3
    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,

    Citation Envoyé par Wyxau Voir le message
    J'ai pourtant bien spécifié l'accès à mon fichier, et j'ai aussi inscrit if __name__ == '__main__' (bien que je n'ai pas compris à quoi cela sert concrètement)
    __name__ retourne le nom du module courant.
    S'il est '__main__', c'est que c'est le script principal.

    Comme vous effectuez le chdir juste avant l'import, on peut supposer que c'est dans ce répertoire là qu'il faut chercher le script/module à importer.
    Hélas, c'est pas comme çà que çà fonctionne: chdir change le répertoire du processus courant et les imports se font toujours relativement au répertoire du script principal.

    Chose que vous auriez pu tester facilement en quelques lignes de code, sans faire un sac de nœuds avec le multiprocessing par dessus, histoire de ne plus savoir où donner de la tête.

    Et si la question est comment importer des module qui sont "ailleurs", cherchez PYTHONPATH sur Internet ou dans la documentation.

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

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci pour vos deux réponses,

    Voici déja le message complet d'erreur :

    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "c:\users\rauli\anaconda3\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
    File "c:\users\rauli\anaconda3\lib\multiprocessing\spawn.py", line 115, in _main
    self = reduction.pickle.load(from_parent)
    ModuleNotFoundError: No module named 'ForetClasse'
    Traceback (most recent call last):
    File "<console>", line 1, in <module>
    File "C:\Users\rauli\Desktop\TIPE\temporaire.py", line 16, in ForetMultiprocess
    process.start()
    File "c:\users\rauli\anaconda3\lib\multiprocessing\process.py", line 112, in start
    self._popen = self._Popen(self)
    File "c:\users\rauli\anaconda3\lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
    File "c:\users\rauli\anaconda3\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
    File "c:\users\rauli\anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
    reduction.dump(process_obj, to_child)
    File "c:\users\rauli\anaconda3\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
    BrokenPipeError: [Errno 32] Broken pipe
    Par ailleurs VinsS, foretClasse n'est pas une classe mais le module que j'importe donc quand la ligne foretClasse.bagging appelle la fonction bagging de mon module foretClasse, et ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    process = Process(target = ForetClasse.jardinage, args =(q, ...)
    j'appelle la fonction jardinage de mon module foretClasse, c'est la fonction que je souhaite faire tourner en parallèle dans mes multiples processus.

    Citation Envoyé par VinsS Voir le message
    Autres remarques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chdir('C:\\Users\\rauli\\Desktop\\TIPE')
    ceci me semble une fausse bonne idée.
    Pourquoi ?

  5. #5
    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
    Citation Envoyé par Wyxau Voir le message
    Pourquoi ?
    Parce que çà fait planter l'import...

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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Je l'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import sys
    sys.path.insert(0, 'C:\\Users\\rauli\\Desktop\\TIPE')
    Et effectivement maintenant cela marche, je n'avais juste pas bien compris votre réponse par rapport au chdir.

    Merci beaucoup de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec le module AI::Categorizer
    Par Pinoute dans le forum Modules
    Réponses: 0
    Dernier message: 20/07/2007, 11h50
  2. problème avec le module TK
    Par thierry7106 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 12/05/2007, 13h50
  3. Probléme avec le module turtle
    Par Newbie46 dans le forum Général Python
    Réponses: 7
    Dernier message: 15/02/2007, 21h03
  4. problème avec le module DBI
    Par vbcasimir dans le forum SGBD
    Réponses: 6
    Dernier message: 08/10/2005, 12h48
  5. problème avec un module
    Par vbcasimir dans le forum Modules
    Réponses: 2
    Dernier message: 29/08/2005, 15h59

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