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 :

Thread fonction double


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 58
    Points
    58
    Par défaut Thread fonction double
    Bonjour,

    Je souhaites exécuter deux threads, mais je sèche complément.

    Je vous présente l'idée de manière générale du sujet.

    Fonction1 :
    While 1:
    x = Random(0,100)

    Fonction2 :
    While 1:
    Si Radom=20 dans Fonction 1:
    ...
    ...

    While 1:
    Fonction2()


    Merci pour votre aide

  2. #2
    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 sunriseparadyse Voir le message
    Je souhaites exécuter deux threads, mais je sèche complément.

    Je vous présente l'idée de manière générale du sujet.

    Fonction1 :
    While 1:
    x = Random(0,100)

    Fonction2 :
    While 1:
    Si Radom=20 dans Fonction 1:
    ...
    ...

    While 1:
    Fonction2()
    Qu'est ce que vous appelez un thread, une fonction?
    Quel pourrait être le sens de "Si Radom=20 dans Fonction 1"?

    Et si on ne comprends pas mieux ce que vous cherchez à faire, pas facile d'essayer de vous aider.

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

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 58
    Points
    58
    Par défaut
    Et bien je voudrais exécuter parallèlement deux boucles while infinie pour faire plus simple.

    Le programme main continue sont script alors deux 2 boucles while indépendantes tournent pendant l'exécution du programme.

    De temps en temps le programme main vient interroger ce qui se passe dans les boucles while.

    Est ce l'objectif est mieux expliqué ?
    Merci.

  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,

    Citation Envoyé par sunriseparadyse Voir le message
    De temps en temps le programme main vient interroger ce qui se passe dans les boucles while.
    Une boucle while exécute des instructions. Si c'est dans un autre thread que le programme principal, vous ne pourrez consulter que des objets (accessibles) modifiés par ces instructions (et les modifier dans certaines conditions).
    Dit autrement, plusieurs séquences d'instructions d'un même programme pourront partager des objets (ou de la mémoire). Le fait que ces séquences soient exécutées de façon asynchrone (via des threads) rend les choses un peu plus compliquées mais ne permet pas de faire "plus".

    Mais çà serait peut être mieux d'essayer d'exposer le problème que vous chercher à résoudre plutôt que d'essayer de faire marcher une fausse bonne idée sans trop savoir le pourquoi.

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

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 58
    Points
    58
    Par défaut
    Bonjour,
    Merci pour votre réponse.
    Le mieux c'est de rentrer clairement dedans sans s'éparpiller.
    Je pense que vous comprendrez mon problème entre la boucle while qui sniff les trames ip et la fonction qui appelle la géolocalisation.

    Problème : Je ratte des IP car la fonction de geoloc demande un certain temps, de plus le rafraîchissement est exécuté pour l’ensemble des adresse alors qu'il ne faudrait géolocaliser que les nouvelles adresse pas encore faites.

    Objectif : une proposition de thread ou autre pour séparer dans le temps ses deux morceaux de programme pour que la geoloc soit indépendantes de la boucle while et réciproquement.


    Voici mon code:

    - on sniff les ip qui passent sur le réseau
    - on les tries
    - on cherche une relation IP, Latitude, Longitude

    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
     
     
    #!/usr/bin/python
    #-*- coding: UTF-8 -*-
     
    import socket
    import requests
    import struct
    import os
    from sets import Set
     
    def geolocalisation(ip):                                        # Split du site et retourne IP, latitude, longitude
            header = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; hu-HU; rv:1.7.8) Gecko/20050511 Firefox/1.0.4'}
            url = 'http://fr.geoipview.com/?q='+ ip
            r = requests.get(url, headers=header)
            gps = r.content.split("GLatLng(")[1].split("),")[0]
            gps = gps.split(", ")
            Latitude = round(float(gps[0]),6)
            Longitude = round(float(gps[1]),6)
            Localisation = r.content.split("localiseur, ")[1].split('''"''')[0]
            Localisation = Localisation.split(", ")
            Ip = Localisation[0]  
            result = [Ip, Latitude, Longitude]
            return(Ip, Latitude, Longitude)
     
    def ip_sans_doublon(buffer_ip):                         # multiples IP
            ip = sorted(set(buffer_ip))                          # IP sans doublons
            return(ip)
     
    rawSocket = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003))
     
    buffer_ip = []
    geo_ip = []
    # recuperation de toutes les ip transitant sur le reseau
    while True:
            packet = rawSocket.recvfrom(2048)
            ethernet_header = packet[0][0:14]
            ethernet_detailed = struct.unpack("!6s6s2s", ethernet_header)
            ethertype = ethernet_detailed[2]
            #if ethertype != '\x08\x00':
            #        continue
            src = socket.inet_ntoa(packet[0][26:30])     # ip destination
            dst = socket.inet_ntoa(packet[0][30:34])     # ip source
            buffer_ip.append(src)                                   # sauvegarde vers buffer
            buffer_ip.append(dst)                                   # sauvegarde vers buffer
            ip = ip_sans_doublon(buffer_ip)                   # liste des nouvelles adresses ip trouvees sans doublon
     
            if len(geo_ip) < len(ip):                                       # Si nouvelle adresse
                    os.system("clear")                                      # Rafraichissement
                    geo_ip = ip                                                 # MAJ liste ip a geolocaliser
                    for i in geo_ip:                                            # Pour chaque ip on essaye une geoloc
                            try:                                                     # Sinon ip classique
                                    print geolocalisation(i)
                            except:
                                    print i

  6. #6
    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
    Ben vous avez une activité qui produit des adresses IP et une autre qui essaie de récupérer latitude, longitude associée a cet IP.

    Le plus simple est de les faire communiquer par un objet Queue.
    Dans la documentation du module, vous avez tout à la fin, un petit exemple qui vous montre comment çà fonctionne.
    Vous pouvez l'adapter à votre cas.

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

Discussions similaires

  1. Retour de fonction doublé !?
    Par Mafate dans le forum PL/SQL
    Réponses: 7
    Dernier message: 26/03/2010, 11h10
  2. Problème avec fonction double entrée
    Par cedrink dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/08/2009, 23h48
  3. thread fonction main
    Par ouiouioui dans le forum Langage
    Réponses: 3
    Dernier message: 29/01/2009, 15h00
  4. Fonction Double lien - Avis & Amelioration
    Par AngelFire dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 19/03/2008, 07h50
  5. Threads fonction
    Par gg2laba dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/02/2005, 11h23

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