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 :

Multiprocessing


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Multiprocessing
    Bonsoir
    Je suis débutant en Python et j'essaie d'apprendre à exécuter des instructions en parallèle.
    En exécutant les instructions suivantes :

    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
    from multiprocessing import Process
    from time import sleep
     
    def work(name):
    	print('debut du travail:%s' % name)
    	for j in range(10):
    		for i in range(10):
    			sleep(0.01)
    			print '. . . .'
    		print '.'
    	print('fin du travail: %s' % name)
     
    p = Process(target=work, args=('test',))
    p.start()
    p.join()
    Je n'obtient aucun résultat.

    j'ajoute que je suis sous windows avec la version 2.7.8 de Python. Par ailleurs j'ai utilisé l'instruction if __name__=='__main__' sans effet

    Merci par avance pour toutes indications sur ce problème

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Salut, bienvenue sur le forum.

    Chez moi, le 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
    from multiprocessing import Process
    from time import sleep
     
    def work(name):
    	print('debut du travail:%s' % name)
    	for j in range(10):
    		for i in range(10):
    			sleep(0.01)
    			print '. . . .'
    		print '.'
    	print('fin du travail: %s' % name)
     
    if __name__ == "__main__":
    	p = Process(target=work, args=('test',))
    	p.start()
    	p.join()
    Fonctionne très bien. Dans ce cas, le if __name__ est obligatoire. Pourquoi? Simplement parce que si tu ne le met pas, l'ensemble du code, se déroule le même process, or cela est impossible. Le if __name__ permet de corriger cela. Le code s'execute dans un process à part qui appelle le process ou se trouve ton "work".

    Sinon, si tu débute en Python, laisse tomber le multiprocess. Commence déjà par apprendre correctement les bases avant de t'attaquer à ce genre de chose, car tu risque rapidement de tomber sur des os. Enfin, je te conseillerai de bien lire les messages d'erreur, car Python est assez clair dans ceux ci.

    Dans ton cas, j'avais le message: " Attempt to start a new process before the current process has finished its bootstrapping phase.". C'est quand meme clair non? (surtout comparé à d'auter lanagage )
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Si vous débutez, vous n'avez peut être encore pas l'habitude d'écrire vos instructions dans un fichier script que vous lancez via l'interpréteur via une commande genre "python mon_script.py".
    Hors, il n'y a que dans ce contexte là que "if __name__=='__main__'" a de l'effet.

    D'où la question, "comment" - dans quel contexte - sont exécutées vos instructions?

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

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

    Sous Ubuntu le code initial donne le résultat attendu.

    Identique pour Python 2 et Python 3 (après modification des print)

    J'ai d'ailleurs été surpris de l'affichage en temps réel des print, en général dans des boucles aussi rapides un flush() est nécessaire.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut multiprocessing
    Merci pour vos réponse!

    Tout d'abord si mes codes sont écrits dans un fichier script. Quand je dis que je suis débutant c'est que je n'ai pas d’expérience sur la programmation orienté objet, mais j'ai tout me même réalisé des projets d’ingénierie scientifique dessus mais j'en arriva à un moment ou mon code mets du temps à se réaliser.

    Par ailleurs après le post de mon message j'avais déjà ajouter l'instruction "if __name__=='__main__':" sans aucun effet

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par captain_bagdad Voir le message
    Par ailleurs après le post de mon message j'avais déjà ajouter l'instruction "if __name__=='__main__':" sans aucun effet
    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
    from multiprocessing import Process
    from time import sleep
     
    def work(name):
        print('debut du travail:%s' % name)
        for j in range(10):
    	for i in range(10):
    		sleep(0.01)
    		print '. . . .'
    	print '.'
        print('fin du travail: %s' % name)
     
    if __name__ == '__main__':
        p = Process(target=work, args=('test',))
        p.start()
        p.join()
    Ce code doit fonctionner et fonctionne sous windows7, Python2.7,... - lancé à "la console" Windows (cmd.exe).

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

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Petite amélioration!

    J'exécutais mon programme sur un IDLE. Depuis une console j'ai le message d'erreur
    AttributeError:'module' has no attribute 'work'

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par captain_bagdad Voir le message
    Petite amélioration!

    J'exécutais mon programme sur un IDLE. Depuis une console j'ai le message d'erreur
    AttributeError:'module' has no attribute 'work'
    A quoi sert d'écrire un fichier script si c'est pour en retaper le contenu à la console Python?

    Vous lancez la console Windows (cmd.exe), puis vous tapez "python <nom du script>.py"

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

Discussions similaires

  1. MPTL: MultiProcessing Template Library
    Par alskaar dans le forum Langage
    Réponses: 16
    Dernier message: 29/04/2007, 16h44
  2. Multithread ou multiprocess
    Par Classico dans le forum C#
    Réponses: 6
    Dernier message: 21/03/2007, 23h59
  3. Langage pour contrôle multiprocessing
    Par crocodile dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 13/06/2006, 20h02
  4. lock de fichier - multiprocess
    Par hugo123 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 11/04/2006, 10h08
  5. Réponses: 16
    Dernier message: 30/01/2004, 11h05

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