Ci sono preoccupazioni che dovrebbe avere sulla memorizzazione di un oggetto Python di blocco in una sessione di coppa?
-
04-10-2019 - |
Domanda
C'è una certa pagina sul mio sito dove voglio evitare che lo stesso utente di visitare due volte di fila. Per evitare questo, ho intenzione di creare un oggetto di blocco (dalla libreria di threading di Python). Tuttavia, avrei bisogno di memorizzare che tra le sessioni. C'è qualcosa che occorre fare attenzione quando si cerca di memorizzare un oggetto di blocco in una sessione (in particolare una sessione Beaker)?
Soluzione
Memorizzazione di un'istanza threading.Lock in una sessione (o in qualsiasi altro luogo che le esigenze serializzazione) è una pessima idea, e presumibilmente si otterrà un'eccezione se si tenta di (in quanto tale oggetto non può essere serializzato, ad esempio, non può essere pickle
d). Un approccio tradizionale per la serializzazione cooperativa dei processi si basa su blocco dei file (su file "artificiali" per esempio in una directory come /tmp/locks/<username>
se si desidera che il blocco sia per utente, come si indica). Credo che la voce di Wikipedia fa un buon lavoro di descrivere l'area generale; se ci quale sistema operativo si sta ordine di marcia dire, potremmo suggerire qualcosa di più specifico (purtroppo non credo che ci sia una soluzione cross-platform per questo).
Altri suggerimenti
Ho appena realizzato che questa era una terribile domanda dal momento che il blocco di una serratura e salvarlo alla sessione fa due passi vanificando così lo scopo delle azioni atomiche della serratura.