Estoy usando el servidor Flask con python.
Tengo un entero pics_to_show . Cada vez que se recibe una solicitud, el usuario recibe el entero pics_to_show . Y pics_to_show se reduce en 1. pics_to_show es un número entero que se comparte con todos los usuarios del sitio web. Podría hacer una base de datos para guardarla, pero quiero algo más simple y flexible. ¿Hay alguna OTRA forma de guardar este número entero?
Hice una clase que guarda tales variables en un archivo JSON.
class GlobalSate: def __init__(self, path_to_file): self.path = path_to_file try: open(path_to_file) except FileNotFoundError: f = open(path_to_file, 'x') f.write('{}') def __getitem__(self, key): file = self.load_file() data = json.loads(file.read()) return data[key] def __setitem__(self, key, value): file = self.load_file() data = json.loads(file.read()) data[key] = value json.dump(data, open(self.path, 'w+'), indent=4) def load_file(self): return open(self.path, 'r+') La clase está demasiado simplificada, por supuesto. Inicializo una instancia en __init__.py y la importo a todos los archivos de rutas (estoy usando BluePrints).
Mi aplicación está encadenada, por lo que es posible que esta clase no funcione... Ya que varios usuarios están editando los datos al mismo tiempo. ¿Alguien tiene otra solución?
Nota: la variable g no funcionaría, ya que los datos se comparten entre usuarios, no entre solicitudes .
Además, ¿qué pasa si quiero incrementar esa variable cada semana? ¿Sería seguro ejecutar un script de python separado para realizar un seguimiento de la fecha o verificar la fecha en cada solicitud al servidor?
Definitivamente terminará con un estado inconsistente, sin un mecanismo de bloqueo entre lecturas y escrituras, tendrá condiciones de carrera. por lo que perderá algunos incrementos.
Además, no está cerrando el archivo abierto, si lo hace suficientes veces, la aplicación se bloqueará.
También un buen consejo es que no desea escribir un software de administración de estado (base de datos), es muy, muy difícil hacerlo bien.
Creo que en su situación, la mejor solución es usar sqlite, ya que es una biblioteca a la que llama desde su aplicación, no hay un servidor adicional.
"Podría hacer una base de datos para guardarla, pero quiero algo más simple y flexible"
En una aplicación de subprocesos múltiples, no puede ir más simple que sqlite (si desea que su aplicación sea correcta).
Si no te gusta SQL, hay algunas opciones más simples: