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 :

variable persistante entre plusieurs programmes différentes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 75
    Par défaut variable persistante entre plusieurs programmes différentes
    Bonjour à tous,

    Ça fait plusieurs mois que je planche sur un problème sans trouver de solution efficace. Je cherche donc des conseils.

    • J'ai un programme principal qui reçoit des taux en chiffre sous format dictionnaire depuis un serveur distant. (script_socket_client.py).
    • J'ai plusieurs programmes dans des scripts différents (script_client.py) qui doivent pouvoir lire ces données mise à jours par ce programme principal.



    J'ai testé notamment le stockage de valeur via un fichier shelve. Mais l’inconvénient c'est que l'on ne peut pas lire et écrire en même temps.

    Au final le but serait de pouvoir stoker mon dictionnaire dans un variable commune à tous les autres programmes accessible en lecture.

    Mais comment faire !

    Je vous remercie pour vos conseils et remarque.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Si tes programmes ne fonctionnent pas en simultané, tu peux passer par un fichier Pickle, par exemple : tous tes programmes en ont le chemin, ils lisent/écrivent selon leurs besoins ; maintenant, ça ne semble pas tellement correspondre à ta situation. Sinon, il faut passer par de la mémoire partagée ou d'autres mécanismes de communications entre processus : https://docs.python.org/3/library/ipc.html. Vu ton cas d'utilisation, ne pourrais-tu pas envisager une base de données (pas SQLite, plutôt MySQL, H2, SQL Server Compact, histoire d'avoir des accès concurrents à la base de données) ?
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 75
    Par défaut
    bonsoir dourouc

    j'étais justement en train de me pencher sur la solution sqlite fourni nativement pas python, mais si je comprend bien tu le le déconseilles? ça ne supporte pas la lecture et écriture simultané ?

    concernant pickle, si le fonctionnement est identique à shelve (impossible de lire et d'écrire en même temps par 2 programmes différents) ça va être compliqué.
    je vais lire ton lien


    je te remercie pour tes conseils.

    Bonne soirée

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par tintin3158 Voir le message
    j'étais justement en train de me pencher sur la solution sqlite fourni nativement pas python, mais si je comprend bien tu le le déconseilles? ça ne supporte pas la lecture et écriture simultané ?
    Effectivement, sqlite ne supporte pas les accès concurrents.

    Tu peux aussi utiliser postgresql qui est un très bon SGBDR open source: https://www.postgresql.org/

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 75
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,



    Effectivement, sqlite ne supporte pas les accès concurrents.

    Tu peux aussi utiliser postgresql qui est un très bon SGBDR open source: https://www.postgresql.org/


    Bonjour tytamos,

    Bon effectivement si sqlite ne supporte pas les mutiples accès je part encore dans la mauvaise direction.
    un solution serait également de revoir mon code et d'utiliser les trhead. ce qui me fait un peu peur car ça à l'air compliqué.

    Mais je me demande avec les trhead,:
    • peux ton lancer un trhead pour en lancer un second (ça oui)
    • peux ton récupérer via un menu par exemple le second trhead pour agir dessus (l'arrêter ou le relancer je suppose)



    ça me permettrait de pouvoir lancer mon programme d'une façon plus optimiser.

    Je vous remercie pour votre temps et vos conseils !

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne suis pas sûr de bien comprendre tout ton contexte, mais les threads pourraient être une solution si tous tes programmes pouvaient faire partie d'un seul et même programme.

    Dans ce cas:

    - le programme est lancé, et il commence à créer un thread dont l'unique fonction sera de récupérer et d'enregistrer les données dans une variable globale, protégée par un verrou (threading.Lock).

    - après avoir fait ça, le programme affiche un menu et attend qu'un utilisateur lui demande quelque chose (fonction "client"). Ce programme pourra accéder à la variable globale en utilisant le verrou pour éviter les collisions d'accès. Il n'est pas nécessaire de créer un autre thread pour ça.

    Mais si les programmes doivent rester séparés, il ne reste plus, à mon avis, qu'un SGBD ou une autre solution du même genre à trouver. Si c'est un fichier, il faut trouver l'analogue d'un verrou pour empêcher sa lecture en même temps que sa mise à jour.

Discussions similaires

  1. [XL-2016] Variables partagées entre plusieurs fichiers
    Par Saperlipopette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/11/2018, 15h58
  2. Variable globale entre plusieurs scripts
    Par Dan25 dans le forum VBScript
    Réponses: 2
    Dernier message: 01/03/2011, 17h15
  3. variable "globale" entre plusieurs fichiers
    Par kitue dans le forum Caml
    Réponses: 2
    Dernier message: 18/01/2010, 16h58
  4. Réponses: 12
    Dernier message: 14/08/2006, 12h55
  5. Partage de variables entre plusieurs pages
    Par bud_gw dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/12/2005, 15h42

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