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 :

threading.Timer vs after tkinter


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut threading.Timer vs after tkinter
    Salut,

    J'envisage de coder une petite class pour construire des objets permettant par exemple d’exécuter une fonction à intervalle régulier... Il devrait y a avoir plusieurs méthodes/fonctionnalités pour pouvoir spécifier l'intervalle (évidemment) et le nombre d’exécution maximal (si il y en a un), pour démarrer et stopper, pour connaitre le nombre d’exécutions et le temps qui s'est "réellement"* écouler depuis le démarrage...

    * Par "réellement" je veux dire qu'il ne faudra pas obtenir ce temps en multipliant le nombre d’exécutions par la durée de l'intervalle car comme vous le savez ce n'est évidement pas fiable car il n'y a aucune garantie que ces intervalles de temps soient respectés.


    Enfin bref, au début je voulais faire cela pour des applications tkinter et donc utiliser la méthode after, je voulais un truc plus général que la class animations de matplotlib... Et alors je me suis rendu compte qu'il existait une class encore plus générale (en ce sens qu'on peut l'utiliser même en dehors de tkinter et matplotlib) à savoir la class threading.Timer qui semble proche de la fonction after de tkinter.

    Du coup je me demande quel serait le meilleur module à utiliser pour faire ce je que veux ? Y a-t-il un moyen plus avantageux ? Y a-t-il des problèmes auxquels je ne penses pas ?

    Merci.

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

    Citation Envoyé par Beginner. Voir le message
    Du coup je me demande quel serait le meilleur module à utiliser pour faire ce je que veux ? Y a-t-il un moyen plus avantageux ? Y a-t-il des problèmes auxquels je ne penses pas ?
    A la base, ça fait pareil: déclencher l'exécution d'une fonction/callable/callback après X secondes.
    La différence est que le multitâche de tkinter est coopératif alors que celui des threads est préemptif.

    Le subtil de la chose est qu'avec coopératif, lorsque le callback s’exécute, un autre callback ne pourra s'exécuter qu'après qu'il se sera terminé. Dans le préemptif, plusieurs callbacks pourront s’exécuter en même temps.

    note: la terminologie vient du "multitâche" qu'on a commencé à réaliser sur des mono-CPU (c'est à la base des scheduler/ordonnanceurs de processus des système à temps partagé des années 70s): le "en même temps" était impossible... mais suspendre l'exécution d'un callback (pré-empter = avant qu'il ne soit terminé) pour en exécuter un autre...

    Dans le "en même temps", il y a la synchronisation d'accès à l'état du programme qui sera implicite (rien à faire) dans le cas coopératif et qui devra être explicite (queue, lock,...) dans le cas préemptif.

    Là ou ça se corse, c'est qu'avec CPython (et le GIL), l'accès aux structures de données de bases est protégé contre les accès concurrents. Sur les exemples "simples", on peut oublier d'être "explicite" et ça va marchoter (tant que le GIL sera là).

    Avec un GUI, on a déjà un multitâche "intégré" qui apporte ses "timers": pas besoin de threads (plus coûteuses en mémoire et CPU - c'est ce qui fait l'intérêt d'asyncio qui offre un multitâche coopératif "à la GUI").

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

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Merci. Je crois que j'ai ma réponse...
    Pour les applications tkinter je vais m'en tenir à after...

Discussions similaires

  1. Exception in thread "Timer-x"
    Par nono44200 dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 14/08/2007, 19h24
  2. Thread + timer
    Par Drazharian dans le forum Général Python
    Réponses: 2
    Dernier message: 26/06/2007, 15h14
  3. Thread + Timer CallBack
    Par crevygood dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/06/2007, 10h44
  4. Thread Timer et Tcomposant
    Par cfalcot dans le forum Delphi
    Réponses: 11
    Dernier message: 19/12/2006, 10h00
  5. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51

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