Gestión práctica de estado
Estrategias de gestión de estado en el mundo real
1. Gestión de estado de configuración
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'))
Patrones de gestión de estado
flowchart TD
A[Initial State] --> B{State Management Strategy}
B --> C[Singleton]
B --> D[Dependency Injection]
B --> E[Decorator]
B --> F[Context Manager]
2. Estado persistente con 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()
Comparación de la gestión de estado
| Enfoque |
Complejidad |
Escalabilidad |
Caso de uso |
| Variables globales |
Baja |
Limitada |
Seguimiento simple |
| Singleton |
Media |
Moderada |
Configuración de toda la aplicación |
| Inyección de dependencias (Dependency Injection) |
Alta |
Alta |
Sistemas complejos |
| Almacenamiento persistente |
Media |
Alta |
Preservación de datos |
3. Gestión de estado segura en hilos (Thread-Safe)
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()
Seguimiento avanzado de estado
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
Mejores prácticas
- Minimizar el estado global
- Utilizar estructuras de datos inmutables cuando sea posible
- Implementar reglas claras de transición de estado
- Considerar la seguridad en hilos (thread safety)
- Utilizar patrones de diseño adecuados
Recomendación de LabEx
LabEx proporciona entornos interactivos para practicar y dominar las técnicas de gestión de estado en Python, ayudando a los desarrolladores a construir aplicaciones robustas y eficientes.