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 ou _threading sur python 3.9


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut Threading ou _threading sur python 3.9
    Bonjour, j'ai fais un scripte en python et je souhaite le modifier en y ajoutant du threading pour effectuer la réception gps en parallèle du programme principal...

    Hors je voudrais savoir quel est pour la version 3.9 de python le thread a utiliser. J'utilise pycharm comme ide et la liste est longue lorsque j'entre "treading"


    Je pensais utiliser import threading mais je ne trouve pas ce module dans pycharm.

    J'ai trouvé un exemple de threadin : https://codes-sources.commentcamarch...mple-de-thread

    Quelqu'un peu t'il m'indiquer quoi utiliser ?

    Merci

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

    Il y a le module threading et la classe Thread... et un mode d'emploi à lire.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Le problème c'est que je ne trouve pas le module threading dans pycharm. Comment faire?

    Nom : treading.png
Affichages : 60
Taille : 27,7 Ko

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    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 105
    Points : 4 455
    Points
    4 455
    Par défaut
    bonjour
    on se fiche complètement de ton éditeur Comme indiqué dans la doc (que tu as lu), ce module est inclus dans python (Tu as demandé à ton éditeur d'installer sys ?)

    Ta fenêtre en copie n'est pas une fenêtre uniquement pour installer des librairies externes ? Si tu utilises cette usine à gaz, c'est à toi de le savoir.
    $moi= ( !== ) ? : ;

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Le module threading fait parti de la librairie standard, il n'y a pas besoin d'installer quoi que se soit, juste l'importer dans votre code suffira.
    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
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Merci, je ne savais pas!

  7. #7
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Je suis en train d'essayer le code d'exemple trouvé ici:

    https://codes-sources.commentcamarch...mple-de-thread

    Je l'ai a peine modifié comme ceci:

    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
    import threading
     
    #classe qui défini notre thread
    class MyThread (threading.Thread):
    	#methode qui initialise la classe
    	def __init__ (self,Fenetre):
    		threading.Thread.__init__ (self, target=self.run)
     
    	def run (self):
    		print("test")
     
     
     
     
    # creation de notre thread
    Thread1 = MyThread()
    Thread1.start()
    for i in range(10000):
        print("i a pour valeur", i)

    J'ai cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "C:\Users\cyril\PycharmProjects\pythonProject\test_threading.py", line 16, in <module>
        Thread1 = MyThread()
    TypeError: __init__() missing 1 required positional argument: 'Fenetre'
     
    Process finished with exit code 1

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Sérieux, vous attaquez les threads avec si peu de bases en python ?

    Quand vous instanciez MyThread, vous avez omis d'y placer l'argument Fenetre. Le message est très clair...
    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)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Je fais ce que je peux

    Désolé si sa vous parait bête mais je suis pas spécialiste de python (j'ai déja fait quelques scripte), je connais mieux le C sur microcontroleur (pic et arduino) et php.

    En quoi est ce necessaire d'ajouter un parametre? J'ai mis 1 dans Thread1 = MyThread(1), la sa marche.

    Je n'est pas besoin de ce parametre, en quoi est t'il necessaire.

  10. #10
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par carlita_84
    En quoi est ce necessaire d'ajouter un parametre?
    C'est vous qui l'écrivez dans votre code : def __init__ (self,Fenetre):
    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)

  11. #11
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Merci j'ai compris , je l'ai enlevé, j'ai laissé self comme ceci: def __init__ (self):

    La je n'est plus besoin de lui envoyer de parametres.

    J'ai une autre question:

    Par hasard j'ai nommé un de mes scriptes threading.py , que se passe t'il?
    J'ai compris que sa semble interférer avec le code... Qui peu m'en dire plus sur ce que sa provoque?

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Si vous utilisez threading avec tkinter, c'est que sans doute vous faîtes un mauvais choix...
    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)

  13. #13
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Non j'utilise une fenetre avec opencv (pas tkinter)

    Par curiosité en quoi est ce une mauvaise idée?

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 824
    Points : 7 120
    Points
    7 120
    Par défaut
    tkinter gère cela de manière autonome (méthode after).
    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)

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    Citation Envoyé par carlita_84 Voir le message
    Par hasard j'ai nommé un de mes scriptes threading.py , que se passe t'il?
    J'ai compris que sa semble interférer avec le code... Qui peu m'en dire plus sur ce que sa provoque?
    Quand tu fais un import, tu indiques un endroit où chercher des fonctions ou autres.
    Si un module (fichier) utilise déjà ce nom, le fait de nommer un fichier de la même façon, va masquer avec celui existant, donc l'accès aux fonctions et autres du module threading ne sera plus possible.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Merci pour la réponse.

    Je suis en train de faire des tests, je vous explique le fonctionnement de mon code:

    Dans mon programme principal j'utilise opencv pour capturer une image qui m'interresse, j'affiche également la fenêtre qui contient la vidéo de la camera.

    Jusqu'a maintenant j'avais mis a la suite le code permettant de recuperer la latitude et longitude de mon gps usb.

    Sa marche mais le code qui recupere la position gps toute les 10 secondes me fait louper des images car sa fonctionne a la suite.

    Ce que je souhaite faire c'est de recuperer la position gps en parallèle du fonctionnement du code principal.

    Hors j'ai fait pour le moment (test) simplement afficher un print d'une variable depuis un tread.

    J'ai laissé le code opencv qui recupere les images dans une boucle while.

    Sa ne semble pas fonctionner correctement (j'ai testé différentes variantes de mon programme)

    Est ce que l'utilisation de time.sleep(1) pourrait bloquer le bon fonctionnement du scripte?

    Ou est ce que je devrais plutot utiliser un thread pour le code opencv qui recupere et affiche les images et un autre thread pour recuperer la position gps.


    Voici mon code (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
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    import threading         
    import cv2                    #For computer vision
    import numpy as np     # provides a high-performance multidimensional array
    import calendar
    import time
    import pygame
    import serial
     
     
     
     
    #########################################################fonction de parsing du gps
    def extract_coordinates(gprmc_sentence):
        # Séparation de la trame en ses parties en utilisant la virgule comme séparateur
        parts = gprmc_sentence.split(',')
     
        # Vérification si la trame est valide et si elle contient des données de position
        if len(parts) < 10 or parts[2] != 'A':
            return None, None
     
        # Extraction de la latitude
        latitude = float(parts[3][:2]) + float(parts[3][2:]) / 60
        if parts[4] == 'S':
            latitude *= -1
     
        # Extraction de la longitude
        longitude = float(parts[5][:3]) + float(parts[5][3:]) / 60
        if parts[6] == 'W':
            longitude *= -1
     
        return latitude, longitude
    ##################################################fin de fonction parsing du gps
     
     
     
     
     
    class MyThread (threading.Thread):
     
    	def __init__ (self):
    		threading.Thread.__init__ (self, target=self.run)
     
    	def run (self):
    		for T in range(1000):
    			print("T a pour valeur", T)
    			time.sleep(1)
     
     
     
     
     
     
    #----------------------------------------------------------------------------------------------------------
     
    # Creating Haarcascade Variable
    nplateCascade = cv2.CascadeClassifier("haarcascades\haarcascade_russian_plate_number.xml")
     
    # ---------------------------------------------------------------------------------------------------------
     
    # Initializing Variable
    minarea = 600
    count = 0
    framewidth = 640
    frameheight = 480
    #framewidth = 1280
    #frameheight = 720
     
    # Number Plate Capturing
    web_cap = cv2.VideoCapture(0)
    web_cap.set(3,framewidth)
    web_cap.set(4,frameheight)
    web_cap.set(10,100) # Brightness id = 10 and 100 intensity level
     
    pygame.mixer.init()
     
     
     
    while True :
    	success, img = web_cap.read()
    	# rotate the image by 90 degree clockwise
        #img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
    	img = cv2.rotate(img, cv2.ROTATE_180)
    	imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    	numberplates = nplateCascade.detectMultiScale(imgGray, 1.1, 4) # 4 : minimum neighbour
     
    # Create bounding box
     
    	for (x, y, w, h) in numberplates:
    		area = w * h
    		if area > minarea:
    			# sauvegarde image voiture
    			current_GMT = time.gmtime()
    			secondes = current_GMT.tm_sec  # pour requete gps usb
    			timestamp = calendar.timegm(current_GMT)
    			cv2.imwrite("voiture/voiture_" + str(timestamp) + "_" + gps_position + ".jpg", img)
    			# dessine un rectangle et ecrit
    			cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0),
    						  2)  # (x,y) : Initial points & (x+w,y+h) : Diagonal points
    			cv2.putText(img, "Number plate", (x, y - 5), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 2)
    			imgRoi = img[y:y + h, x:x + w]  # Region of number plate
    			cv2.imshow("ROI IMAGE", imgRoi)
    			# sauvegarde la plaque uniquement
    			cv2.imwrite("plaque/plaque_" + str(timestamp) + "_" + gps_position + ".jpg", imgRoi)
    			print("++++++++" + gps_position)
     
    			pygame.mixer.music.load("mp3/alarme.mp3")
    			pygame.mixer.music.play()
     
    	cv2.imshow("Video", img)
     
     
     
    Thread1 = MyThread ()
    Thread1.start()

  17. #17
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    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 105
    Points : 4 455
    Points
    4 455
    Par défaut
    bonjour
    Citation Envoyé par carlita_84 Voir le message
    recupere les images dans une boucle while.

    qui ne marche pas
    ne marche pas quoi ? si c'est le lancement de ta tache, c'est normal, c'est ce que tu as codé !
    lancer après la boucle while est normal ?
    $moi= ( !== ) ? : ;

  18. #18
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    J'ai ceci:

    Le terminale affiche bien la variable qui s'incremente mais ma fenetre bug.

    Nom : Screenshot_2.png
Affichages : 37
Taille : 17,7 Ko

    J'ai modifié.

    J'ai placé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Thread1 = MyThread ()
    Thread1.start()
    avant la boucle while.

Discussions similaires

  1. threads en chat sur Python
    Par mcherkao88 dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 17/01/2010, 18h22
  2. [Thread] deux joueurs sur le même clavier
    Par homeostasie dans le forum SDL
    Réponses: 16
    Dernier message: 04/11/2006, 15h30
  3. [Thread] Petite question sur notify() et wait()
    Par Invité dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 12/05/2006, 12h13
  4. [Debutant] Un thread qui dessine sur une fenetre ???
    Par Spartan03 dans le forum OpenGL
    Réponses: 6
    Dernier message: 05/04/2006, 20h19

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