Contesto: Sto sviluppando un'applicazione web utilizzando webapp2
web-framework con python da ospitare su GAE.
L'applicazione web ( web-app d'ora in poi) è una variante degli scacchi. Essendo un primo timer, ho sicuramente fatto un sacco di errori di progettazione. Uno di questi è quello a cui si riferisce questa domanda, ci arriverò tra poco.
Lo scopo della web-app era di consentire a un numero piuttosto elevato di giocatori di giocare a scacchi a 2 giocatori, in modo che più giochi fossero eseguiti in parallelo. Pur non superando la quota gratuita su GAE. ( I am a student ).
Per farlo, ho pensato di creare un nuovo oggetto di gioco e di memorizzare il id(game_object)
insieme al machine_id
dei due giocatori che giocavano su quell'istanza, nel datastore.
Quando interrogando il datastore con machine_id
di un giocatore, potrei ottenere un valore id()
, e pensavo potessi usare quel valore come key
in un dizionario in cui un riferimento al game_object
costituisce il valore.
Facendo questo, non ho bisogno che scriva / aggiorni il datastore, risparmiando così sulle preziose scritture. Potrei facilmente modificare lo stato di gioco di game_object
, e potrebbe essere ancora referenziato da id()
.
Ma ora quello che succede è che funziona bene per alcune mosse. Successivamente viene eseguita la garbage collection e il game_object
viene cancellato dalla memoria. Sollevare un'eccezione NameError.
La mia domanda è, può essere risolto creando nuovi oggetti di gioco in un modulo separato in cui la garbage collection è disattivata e quindi periodicamente / innescata da un evento che libera la memoria? Altrimenti? Come posso risolvere questo problema?