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 :

if __name__ == '__main__': & Ecran bleu


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 42
    Par défaut if __name__ == '__main__': & Ecran bleu
    Le problème va se corser vers la fin...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if __name__ == '__main__':
    Ceci est extrêmement sympathique pour indiquer le début d'un programme. Chaque langage a sont petit truc à lui pour démarrer.

    En C++ il faut bien écrire le non moins sympathique :

    Néanmoins, la personne qui m'a aidé à faire mes premiers pas en Python m'avait parlé d'une simple convention, voire d'une habitude pratique pour indiquer le début d'un programme. Il s'agissait presque d'une simple repère visuel.

    Effectivement, il est possible en Python, contrairement au C++, de se passer du "bloc main".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
    using namespace std;
     
    int main()
    {
       printf("hello");
    }
    J'ai ensuite appris qu'en Python, le "bloc main" pouvait être utile dans les module.
    http://effbot.org/pyfaq/tutor-what-i...e-main-for.htm
    Ainsi on peut écrire un bloc de test dans les modules, et celui-ci ne sera pas exécuté lorsque le module sera exécuté pas le programme principal.

    On peut donc toujours se passer du "bloc main" dans le programme principal et se contenter d'un gros commentaire qui indique visuellement le début de l'exécution pour le cas où il y aurait beaucoup de choses déclarées avant, ça peut être utile pour naviguer rapidement dans le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    imports...
     
    déclarations...
     
    ##################################
    ###   Début de mon programme   ###
    ##################################
     
    print "hello"
    On peut aussi mettre toutes les déclarations dans un module. Ainsi le programme débute au début du fichier principale.
    Enfin, chacun fait comme il veut.

    Maintenant, voici un programme qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from multiprocessing import Process, Lock
     
    def f ( l, txt, nbr ):
        for i in range(nbr):
            l.acquire()
            print( "%s_%i" % (txt, i) )
            l.release()
     
    if __name__ == '__main__':
        lock = Lock()
        Process(target=f, args=( lock, "XXX", 10 )).start()
        Process(target=f, args=( lock, "III", 10 )).start()
    Maintenant, voici un programme qui ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from multiprocessing import Process, Lock
     
    def f ( l, txt, nbr ):
        for i in range(nbr):
            l.acquire()
            print( "%s_%i" % (txt, i) )
            l.release()
     
    lock = Lock()
    Process(target=f, args=( lock, "XXX", 10 )).start()
    Process(target=f, args=( lock, "III", 10 )).start()

    Quelqu'un a-t-il une explication ?


    Vous noterez que le programme suivant marche très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from threading import Thread, Lock
     
    def f ( l, txt, nbr ):
        for i in range(nbr):
            l.acquire()
            print( "%s_%i" % (txt, i) )
            l.release()
     
    lock = Lock()
    Thread(target=f, args=( lock, "XXX", 10 )).start()
    Thread(target=f, args=( lock, "III", 10 )).start()
    .

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    C'est un comportement lié à l'utilisation de multiprocessing sous Windows bien documentée avec ce module.

    - W
    PS:
    On peut aussi mettre toutes les déclarations dans un module. Ainsi le programme débute au début du fichier principale.
    Enfin, chacun fait comme il veut.
    Ne négligez pas le fait qu'en Python, un module est une sorte de classe. C'est une boîte à laquelle on peut associer méthodes, variables et autres déclarations. On ne peut pas en hériter mais on peut l'instancier (via from xxx import *) ou l'utiliser comme singleton (via import).
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour,
    j'indiquerais au passage que l'on a le même type de comportement avec le module unittest.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut rambc

    j'indiquerais au passage que l'on a le même type de comportement avec le module unittest.
    Pourrais tu préciser le contexte?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Ecran bleu...au demarrage...probleme systeme de fichier ?
    Par ludophil dans le forum Windows XP
    Réponses: 5
    Dernier message: 10/04/2007, 02h44
  2. Ecran bleu a l'utilisation d'une Clé USB
    Par lemotard dans le forum Windows XP
    Réponses: 10
    Dernier message: 11/11/2006, 19h07
  3. plantage portable HP, XP, ecran bleu
    Par djibril dans le forum Windows XP
    Réponses: 21
    Dernier message: 12/05/2006, 11h03
  4. NForce4 et depuis ecran bleu
    Par Harry dans le forum Périphériques
    Réponses: 4
    Dernier message: 22/04/2006, 00h00
  5. ecran bleu après nettoyage de disque inachevé
    Par Lord Van dans le forum Sécurité
    Réponses: 4
    Dernier message: 05/01/2006, 12h53

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