2010-07-02 8 views
5

Ho letto la documentazione sul threading per python e come ho ritenuto opportuno il seguente dovrebbe essere vero: Puoi accedere (leggi) a qualsiasi oggetto PoD o python specifico (come un array) senza causare errori in un programma multi-thread che tenta la stessa cosa allo stesso tempo, ma non è possibile cambiarli e accettare l'integrità del thread.Sicurezza dei thread in Python (domanda come funziona)

La mia domanda riguarda le classi. Ho un server che sta delegando l'accesso al database a thread diversi, tuttavia voglio che siano in grado di accedere a tutte le istanze di una classe che gestisce la generazione della risposta. Tuttavia, mi chiedo se questa classe sia sicura per i thread (vorrei evitare di creare più istanze), la discussione non cambia nessuna variabile di istanza (es. self.something = (something)) ogni funzione usa le sue variabili locali (esse accedono alle variabili di istanza della classe ma non li cambia), quindi riassumendo: la mia domanda è se molti thread possono usare la stessa istanza e le funzioni di chiamata contemporaneamente.

risposta

1

I locali sono thread-safe in quanto non sono condivisi tra thread. Tutte le costanti (variabili che non si scrivono da qualsiasi thread) sono thread-safe. Se è tutto ciò che hai, allora sì, va bene. Assicurati che i membri della classe di cui stai parlando non siano realmente scritti da altri thread.

Verificare che non vi siano risorse condivise sottostanti che potrebbero non essere thread-safe, ad es. se ogni thread utilizza l'oggetto di connessione al database che potrebbe causare problemi, a meno che quell'oggetto non sia specificamente documentato come thread-safe.

+0

Okey. Grazie, prenderò il tuo consiglio e renderò la connessione al database individuale per ogni thread. – Andreas