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 :

Gérer des paramètres globaux dans un projet python.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Narann
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut Gérer des paramètres globaux dans un projet python.
    Bonjours à tous!

    Étant autodidacte, je n'ai pas de très bonnes méthodes question code, design pattern etc...

    Jusqu'à présent cela ne m'avais jamais posé trop de soucis. mais il y a un début à tout!

    Voici le topo:

    J'ai une appli avec plusieurs objets qui font régulièrement appel à un autre objet ("Database" qui exécute des requêtes SQL demandé par les autres objets).

    Chaque objet à ça dans son init:
    Déjà, je ne suis pas sur que cette méthode soit très propre...

    Mais ce n'est pas le sujet de ma question.

    Le init de Database (appelé à chaque objet donc) récupère des options via ConfigParser (avec forcément un open sur le fichier de config à chaque création de Database...):

    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
    class Database() :
     
    	def __init__( self ):
     
    		# Reading config file
    		config = ConfigParser.ConfigParser()
    		config.read("toto.cfg")
    		hostName = config.get('DataBase', 'HostName')
    		userName = config.get('DataBase', 'UserName')
    		userPassword = config.get('DataBase', 'UserPassword')
    		verbose = config.get('DataBase', 'Verbose')	# True/False
     
    		self.db = None
     
    		#####################
    		# bd connection infos
    		#####################
    		self.dbHostName = hostName
    		self.dbUserName = userName
    		self.dbUserPassword = userPassword
     
    		self.verbose = bool(verbose)
    Quelle est la meilleure méthode pour gérer ce genre de choses?

    Rendre les options global? Comment s'y prendre pour faire ça de manière propre?
    Rendre Database global? L'objet n'est crée qu'une seul fois et tous appellent le même? Encore une fois, Comment s'y prendre pour faire ça proprement?

    Je connais un peu l'OO (j'ai fait un peu de C++). J'ai pensé au pattern singleton mais je doute un peu.

    Ce genre de question me semble être la base et n'importe quel conseil et/ou brouillon de code pour m'aiguiller un peu serait le bienvenu.

    Comment géreriez vous ce genre de cas?

    Un grand merci d'avance pour votre coup de mains.

  2. #2
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Pour ma part je préconiserai le pattern Singleton Oo
    Que ce soit pour la Config ou la DataBase.

    Avec une attention particulière aux éventuels accès concurrents.

    son implémentation est montrée sur Wikipédia

  3. #3
    Membre confirmé Avatar de Narann
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Merci

    Si je ne dis pas de bêtises, MySQL gère bien les accès concurrents.

    Database ne fait que ça: Des requêtes et renvoi des résultats.

    Je vais donc me diriger vers cette voie là.

  4. #4
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    MySQL gère effectivement les accès concurrents
    (comme la quasi totalité des DB à ma connaissance ^^)

    Mais il faut faire attention si une méthode de Database peut être 'découpée'/interrompu par le processeur
    (je suis sûr que je m'exprime super mal =/)
    Alors elle peut être perturbée par des accès concurrents ...
    C'est pas dit qu'elle le soit ^^
    Mais c'est à tenir compte pour d'éventuel bug par la suite

  5. #5
    Membre confirmé Avatar de Narann
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Citation Envoyé par brachior Voir le message
    Mais il faut faire attention si une méthode de Database peut être 'découpée'/interrompu par le processeur
    (je suis sûr que je m'exprime super mal =/)
    Non non je vois bien le principe.
    Merci beaucoup pour l'info!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/04/2007, 17h17
  2. Comment utiliser des dll C++ dans un projet C# ?
    Par kreitech dans le forum C#
    Réponses: 5
    Dernier message: 20/02/2007, 16h49
  3. Réponses: 2
    Dernier message: 20/06/2006, 10h42
  4. Réponses: 11
    Dernier message: 13/03/2006, 17h51
  5. Récupérer des paramètres HTML dans un ActiveX
    Par mr.saucisse dans le forum MFC
    Réponses: 26
    Dernier message: 02/02/2006, 16h25

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