Domanda

In caso contrario, c'è un modo posso garantire la sicurezza dei thread programmando un certo modo?

Per chiarire, quando si parla di "threadsafe,' voglio dire le discussioni Python, non le discussioni a livello di sistema operativo.

È stato utile?

Soluzione

Tutto dipende l'interazione tra il codice e Cython GIL di Python, come documentato in dettaglio qui . Se non si fa nulla di speciale, codice Cython generati rispetterà la GIL (così come un'estensione C-coded che non utilizza le macro-GIL rilascio); che rende tale codice "come threadsafe come codice Python" - che non è molto, ma è più facile da gestire rispetto completamente libero-threading di codice (è comunque necessario architetto cooperazione multi-threaded e la sincronizzazione, idealmente con le istanze della coda, ma possibilmente con bloccaggio e c).

Il codice che ha abbandonato il GIL e non ancora acquisito indietro non devono in alcun modo interagire con il runtime di Python e gli oggetti che il runtime di Python utilizza - questo vale per Cython altrettanto bene come per le estensioni C-codificati. Il vantaggio di ciò è naturalmente che tale codice può essere eseguito su un nucleo separato (fino è necessario sincronizzare o comunque comunicare con il runtime Python di nuovo, ovviamente).

Altri suggerimenti

Blocco interprete globale di Python significa che solo un thread può essere attivo nell'interprete in qualsiasi momento. Tuttavia, una volta che il controllo viene passato ad un'estensione C altro thread può essere attiva entro l'interprete. Più thread possono essere creati, e nulla impedisce un filo venga interrotta entro la metà di una sezione critica. N

sul codice thread-safe possono essere attuate entro l'interprete, quindi nulla di codice in esecuzione all'interno del interprete è intrinsecamente thread-safe. Codice in moduli C o Pyrex può comunque modificare le strutture di dati che sono visibili in codice python. codice nativo può, naturalmente, hanno anche problemi di threading con strutture di dati nativi.

Non è possibile garantire la sicurezza al di là del filo usando il disegno e la sincronizzazione appropriata -. GIL sulla interprete Python non cambia materialmente questo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top