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 :

Interférence entre deux programmes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut Interférence entre deux programmes
    J'ai observé une interférence entre deux de mes programmes exécutés dans deux fenêtres IDLE.
    Ces deux programmes traitent des codes sources de pages web: ils font des interrogations aléatoires d'un même site internet mais ils ne consultent pas les mêmes pages. C'est pour cela qu'ils ont en fait quasiment le même code, c'est à dire la même suite d'instructions, la seule différence résidant dans la valeur de certaines chaines de caractères qui définissent les pages à consulter. Tels qu'ils sont écrits, il est tout à fait impossible que les deux programmes consultent une même page précise, même à des moments différents.

    Or j'ai observé une interférence entre ces deux programmes après les avoir truffés d'instructions pour enregistrer le déroulement de leur exécution dans un fichier log.

    Au sein d'une fonction, le programme A a exécuté une instruction x = ln[9:13] pour extraire un nombre situé dans une ligne du code source d'une certaine page P1 du site consulté.
    La suite aurait dû être le renvoi de la valeur trouvée par la fonction,
    mais au lieu de cela, il y a eu une deuxième exécution de la même instruction x = ln[9:13] , mais cette fois-ci avec une valeur ln différente.
    Cette dernière valeur était celle d'une ligne du code source d'une autre page PX du même site, page entièrement différente de P1 et qu'il n'est absolument pas prévu que le programme A puisse consulter: algorithmiquement parlant, il est impossible au programme A de lire la page PX.
    La fonction a donc extrait un nouveau nombre de cette nouvelle valeur de la variable ln et renvoyé ce nouveau nombre. Celui-ci ne correspondant à rien d'attendu dans le programme A, ce dernier a planté.

    Je me suis aperçu qu'au même moment le programme B qui tournait dans une autre fenêtre a consulté la page PX, ce qui est tout à fait prévu par son algorithme, et il n'y avait donc rien d'anormal dans cette consultation.


    Le problème est donc qu'une ligne du code source d'une page traitée par B à un instant précis s'est retrouvée être traitée de façon anormale aussi par le programme A au même instant précis.

    =================

    Avant de poser ma question, j'ai fait des recherches et je suis tombé sur:

    « IDLE peut être utilisé pour exécuter vos programmes mais n'en abusez pas. Je le déconseille si vous devez lancer des programmes assez lourd ou contenant une interface graphique, IDLE étant programmé en Tkinter, il peut arriver qu'il y ait des interférences entre votre programme et Tkinter. Il y a ainsi parfois des bogues qui surviennent à cause de l'exécution d'un script sous IDLE. »
    http://guigui.developpez.com/Tutorie...PythonWindows/

    Je n'ai pas l'impression que mes programmes soient très lourds et ils ne comportent rien de graphique, sauf des lignes de caractères qui apparaissent dans la fenêtre IDLE pour rendre compte des événements.
    Mais cet extrait semble s'appliquer à mon cas.



    *** Pouvez vous me dire si le problème que j'ai décrit
    - est susceptible d'être lié à la façon dont les programmes sont exécutés sous IDLE
    - ou s'il pourrait y avoir une histoire de débordement ou de chevauchement de zones mémoires.
    J'ai lu des choses de ce genre mais je n'y comprends goutte.


    Si c'est dû à IDLE, c'est embêtant parce que je n'aime pas la fenêtre noire du Shell qui ne garde pas la totalité des lignes affichées à mesure quand leur succession est trop longue.
    Comment faire alors pour éviter ces interférences ?


    ======================


    J'ai commencé à m'intéresser aux threads.
    J'ai vu dans le module threads la fonction start_new_thread( function, args[, kwargs])
    Je n'y comprends pas grand chose encore.
    Je me demandais s'il n'y a pas le moyen de forcer une exécution à se faire dans des limites bien précises (un thread ?) , sans déborder sur de la mémoire ou un processus appartenant à un autre programme.
    Que fait start_new_thread( function, args[, kwargs]) ?


    Merci d'avoir lu jusqu'ici.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Bonjour,

    pas de chevauchement de zones mémoires, mais si x est une variable globale d'un module appelé par les deux programmes, alors on pourrait avoir ce type de comportement. J'utilise peu IDLE, mais ce type de fonctionnement me surprendrait autrement.
    Utiliser des threads n'arrangera rien (au contraire!), ils utilisent tous les deux la zone mémoire du processus.
    Enfin, je suppose que la fenetre noire est la fenetre de commande sous windows, il est possible (clic droit sur la barre) de modifier ses parametres et de conserver jusqu'à 3000 lignes, ou bien je te conseille d'écrire ton log dans un fichier par exemple.

Discussions similaires

  1. Passage d'information entre deux programmes
    Par CTotophe85 dans le forum C++
    Réponses: 8
    Dernier message: 22/10/2008, 19h37
  2. communication entre deux programmes
    Par Invité dans le forum C
    Réponses: 19
    Dernier message: 12/10/2008, 12h07
  3. DLL partagé entre deux programme
    Par CTotophe85 dans le forum C++
    Réponses: 22
    Dernier message: 26/09/2008, 14h00
  4. Débutant, Communication entre deux programmes
    Par Madalen dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2007, 22h27
  5. [TP] Echanger des données entre deux programmes
    Par ILIAS Raphaël dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 22/03/2005, 09h31

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