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 :

Processing et delay en nanosecondes pour retarder l'exécution d'un code Python [Python 3.X]


Sujet :

Python

Vue hybride

theophiledumont72 Processing et delay en... 27/04/2022, 17h20
wiztricks Salut, Vous ne pourrez... 27/04/2022, 17h37
papajoker Bonjour OUI, python est... 27/04/2022, 19h55
theophiledumont72 Oui, effectivement avec une... 29/04/2022, 09h37
wiztricks Voilà qui est plus réaliste.... 29/04/2022, 10h35
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut Processing et delay en nanosecondes pour retarder l'exécution d'un code Python
    Bonjour à tous,

    Je sollicite votre aide car je rencontre plusieurs soucis.

    *** Contexte ***

    Je prévois de développer un environnement en Python pour faire du processing sur des systèmes embarqués. L'objectif étant de déclencher certaines tâches successives depuis mon process Python mais de les retarder pour me synchroniser avec mon système embarqué qui tourne à 40 Mhz.


    *** Ce que je suis en mesure de faire ***

    Pour vérifier le bon ou mauvais déroulement de mes tests, je viens vérifier certains ports d'entrées/sorties (UART, GPIO, etc). Pour y parvenir, j'utilise des threads via le module "concurrent" de Python.


    *** Ce que je ne suis pas en mesure de faire ***

    J'aimerais ainsi être en mesure de déclencher certaines actions avec une certaine précision depuis mon programme principale. J'avais pensé jouer sur la fonction "delay" du module "time" mais il n'est visiblement pas destiné à jouer sur des temps aussi court que le 10è ou 100è de microsecondes.

    L'autre soucis, c'est que je n'ai aucune idée de la fréquence d'exécution de mon programme python donc je ne peux pas me synchroniser avec mon système embarqué qui tourne approximativement à 40 Mhz.


    En espérant avoir été assez clair dans mes explications.

    Je vous remercie par avance de votre aide.

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

    Vous ne pourrez jamais faire réagir un programme Python en 10-8 s: vous n'avez pas un matériel temps réel ni un système temps réel et à cette vitesse la on travaille avec la durée de chaque instructions machine (dont Python est très loin).

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

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Bonjour
    Citation Envoyé par theophiledumont72 Voir le message
    je n'ai aucune idée de la fréquence d'exécution de mon programme python
    OUI, python est clairement pas adapté

    Pour test (uniquement), tu peux faire une simple boucle infinie pour lancer les taches en //

    Note: A voir combien de temps te prend la lecture de tes ports (déjà écrit si j'ai bien compris). Si cette tâche est trop longue (ce que je suppose avec python), tu vas te retrouver avec une pile de taches en attente chaque seconde. Il faut donc dans un premier temps une tache/thread impérativement moins longue que ton timer

    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
    20
    21
    from time import perf_counter_ns
     
    counts = ()
    old = perf_counter_ns()
    i = 0
    while True:
        i += 1
        current = perf_counter_ns()
        counts += (current - old,)
        if current - old > 1000:
            # lance ma tache en //
            #print("je teste mes ports", i)
            pass
        if i > 299:
            break
        old = current
     
    print()
    print("durées des boucles en nanosecondes\n", counts)
    print("max", max(counts))
    print("moyenne", sum(counts)//len(counts), "nanosecondes")

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    Oui, effectivement avec une résolution de 1 milliseconde au mieux ce n'est pas acceptable pour les tests que je dois réaliser.

    J'ai pensé à une alternative. Je compte utiliser un STM32F4 (clock interne de 160 Mhz) pour gérer la synchro de mes déclenchements. Il faudra juste que je développe un protocole de communication pour adresser telle ou telle requête.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 729
    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 729
    Par défaut
    Citation Envoyé par theophiledumont72 Voir le message
    Il faudra juste que je développe un protocole de communication pour adresser telle ou telle requête.
    Voilà qui est plus réaliste.

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

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

Discussions similaires

  1. La NASA lance une compétition pour accélérer l'exécution d'un code tournant sur son superordinateur
    Par Patrick Ruiz dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 20
    Dernier message: 08/01/2018, 13h24
  2. [Python 3.X] Introduction à l'outil McCabe pour mesurer la complexité d'un code Python
    Par deusyss dans le forum Général Python
    Réponses: 5
    Dernier message: 25/09/2017, 12h50
  3. Dos create process "Appuyer sur une touche pour continuer"
    Par inspecteur rick dans le forum Débuter
    Réponses: 2
    Dernier message: 31/12/2009, 12h23
  4. Fonction du genre delay, sleep, wait pour attendre 1000ms
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/06/2005, 17h17
  5. [FLASH MX] Commande pour retarder une action
    Par anksou dans le forum Flash
    Réponses: 15
    Dernier message: 23/11/2004, 09h33

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