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 :

à quoi sert select.select?


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Points : 9
    Points
    9
    Par défaut à quoi sert select.select?
    Bonjour,

    je voudrais savoir à quoi sert la primitive select.select() en python (si possible des exemples d'utilisation.

    Adam.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Points : 182
    Points
    182
    Par défaut
    Bonjour adamsony,

    pour voir ce que fait select.select() tu peux essayer ce qui suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import select
    help(select.select)
    de ce que j'ai compris, c'est une interface qui permet de faire la même chose qu'en C, c'est à dire gérer une pool de descripteurs de fichiers typiquement utilisée pour gérer plusieurs sources dans un seul processus/thread.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Points : 9
    Points
    9
    Par défaut
    on peut donc par exemple lire plusieur fichier et y écrire en une fois c'est çà?

  4. #4
    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
    Pour des exemples voir D.Hellman.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    le module select est l'équivalent de la fonction select() en C
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Points : 9
    Points
    9
    Par défaut
    ok, mais il prend quoi exactement en paramètre car je comprend rien sur ce point, es ce un descripteur de fichier ou une liste de descripteur de fichier?

  7. #7
    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,
    Citation Envoyé par adamsony06 Voir le message
    on peut donc par exemple lire plusieurs fichier et y écrire en une fois c'est çà?
    Entre autres!

    Par défaut, les primitives .read, .write sont "synchrones": tant que l'opération d'entrée sortie (IO) n'est pas terminée, le programme attend.

    .select permet de supporter un mode asynchrone.
    .read et .write lancent l'IO et redonnent la main au programme avant que l'IO soit terminée.
    .select va permettre de "scruter" les différents "file descriptors" - fd -en attente pour savoir si une des IO en cours est terminée ou si une error a été retournée.
    "file descriptors" = fichiers, sockets, ou autre objet se conformant à cette interface/API.

    Sauf dans les cas "simples", la mise en œuvre de cette fonctionnalité est assez délicate car elle impose la création d'un contexte explicite pour gérer l'état de chaque fd afin de savoir quelle opération lancer à la fin de l'IO => une sorte de mécanique d'ordonnancement.

    En Python, le module asyncore propose des primitives qui permettent de ne pas avoir à tout coder, voir les exemples de Hellmann

    Une autre solution est d'associer les files descriptors à des "threads" et d'utiliser l'API "synchrone": pendant que la thread attend que l'IO se termine, d'autres threads peuvent "bosser".
    Le contexte est alors géré implicitement par la thread et l'ordonnancement fait par l'OS.
    C'est moins de lignes de code à écrire et à mettre au point.
    note: En Python le module asyncore rend la chose aisée mais il faudra quand même écrire plus de lignes de code qu'en passant par les threads.

    Cette "simplicité" a (bien sûr) des impacts côté performance.

    En gros, avec quelques dizaines de "file descriptors", leur dédier une thread sera "acceptable" au regard du nombre de ligne de code "économisées".

    Avec des milliers de "file descriptors", l'overhead sera sensible.
    Pire, à l'instant T, il ne pourra y avoir plus de threads "actifs" que de CPU dans le système => Python, de base, réduit le nombre de CPU à 1.

    Dans ce cas, on essaiera de limiter le nombre de threads en fonction du nombre de CPU. Ce qui conduit à spécialiser chaque thread à réaliser une partie des traitements associés à chaque "fd". Et créer contexte/état explicite et ordonnanceur pour dispatcher le boulot.
    En Python, cela est réalisé par la bibliothèque "Twisted" via la réalisation d'un pattern de programmation appelé "reactor" voir exemple

    - W

    PS: select est "obsolète", kevent is "better".
    La différence étant qu'avec un grands nombre fd, les implications du passage à l'OS du grosse liste de fds avec un retour dès que l'état de l'un d'entre eux change, signifie pooler l'état de l'ensemble à chaque retour.
    Avec beaucoup de fd, beaucoup de boulot à chaque aller retour pour 0 informations (les idles on s'en fout).

    kevent permet au programme d'être notifié d'un change sur chaque fd.
    Moins de boulot pour supporter l'interface => OS et programme s'en portent mieux.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Points : 9
    Points
    9
    Par défaut
    ok, merci tous le monde.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Points : 9
    Points
    9
    Par défaut
    j'ai essayer cela et sa se compile pas(il s'arrête à la ligne du os.open) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import os,sys,select
     
    if __name__=="__main__" :
    	os.mkfifo("co",0600)
    	fif=os.open("co",os.O_WRONLY)
    	l=[]
    	l.append(fif)
    	c=select.select([],l,[])
    	print "%d" %(c)	
    	unlink("co")
    	sys.exit()
    merci beaucoup pour la reponse

Discussions similaires

  1. [ASP] utilisation de <select selected=selected >
    Par richard_sraing dans le forum ASP
    Réponses: 10
    Dernier message: 26/04/2010, 15h52
  2. A quoi sert XML-Schema
    Par Community Management dans le forum Valider
    Réponses: 20
    Dernier message: 26/01/2009, 09h52
  3. a quoi sert le schema dans postgres ??
    Par champion dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 13/09/2004, 10h25
  4. [info] A quoi sert ImageObserver ?
    Par FrigoAcide dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 22/03/2004, 17h20

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