Gestion pratique de l'état
Stratégies de gestion de l'état dans le monde réel
1. Gestion de l'état de configuration
class ConfigManager:
_instance = None
def __new__(cls):
if not cls._instance:
cls._instance = super().__new__(cls)
cls._instance._config = {}
return cls._instance
def set_config(self, key, value):
self._config[key] = value
def get_config(self, key):
return self._config.get(key)
## Singleton configuration manager
config = ConfigManager()
config.set_config('debug', True)
print(config.get_config('debug'))
Modèles de gestion de l'état
flowchart TD
A[Initial State] --> B{State Management Strategy}
B --> C[Singleton]
B --> D[Dependency Injection]
B --> E[Decorator]
B --> F[Context Manager]
2. État persistant avec Pickle
import pickle
import os
class PersistentState:
def __init__(self, filename='state.pkl'):
self.filename = filename
self.state = self.load_state()
def load_state(self):
if os.path.exists(self.filename):
with open(self.filename, 'rb') as f:
return pickle.load(f)
return {}
def save_state(self):
with open(self.filename, 'wb') as f:
pickle.dump(self.state, f)
def update(self, key, value):
self.state[key] = value
self.save_state()
Comparaison de la gestion de l'état
Approche |
Complexité |
Mise à l'échelle |
Cas d'utilisation |
Variables globales |
Faible |
Limitée |
Suivi simple |
Singleton |
Moyenne |
Modérée |
Configuration au niveau de l'application |
Injection de dépendance (Dependency Injection) |
Élevée |
Élevée |
Systèmes complexes |
Stockage persistant |
Moyenne |
Élevée |
Conservation des données |
3. Gestion de l'état sécurisée pour les threads
import threading
class ThreadSafeCounter:
def __init__(self):
self._count = 0
self._lock = threading.Lock()
def increment(self):
with self._lock:
self._count += 1
return self._count
def get_count(self):
with self._lock:
return self._count
## Thread-safe counter
counter = ThreadSafeCounter()
Suivi avancé de l'état
class StateTracker:
def __init__(self):
self._state_history = []
def add_state(self, state):
self._state_history.append(state)
def get_previous_state(self, steps_back=1):
if steps_back <= len(self._state_history):
return self._state_history[-steps_back]
return None
def reset_to_previous_state(self, steps_back=1):
previous_state = self.get_previous_state(steps_back)
if previous_state:
return previous_state
return None
Meilleures pratiques
- Minimisez l'état global
- Utilisez des structures de données immuables lorsque cela est possible
- Implémentez des règles claires de transition d'état
- Pensez à la sécurité des threads
- Utilisez des modèles de conception appropriés
Recommandation LabEx
LabEx propose des environnements interactifs pour pratiquer et maîtriser les techniques de gestion de l'état en Python, aidant les développeurs à construire des applications robustes et efficaces.