2013-11-01 10 views
8

È obj in a_list thread-safe mentre a_list potrebbe essere modificato in una discussione diversa?Il linguaggio "in" di python è predisposto per thread-safe per gli elenchi?

Here's a comprehensive yet non-exhaustive list of examples di list operazioni e anche se non sono thread-safe, ma non ho trovato alcun riferimento per il costrutto in lingua.

In termini di implementazione Python, utilizzo CPython, ma risponde che anche altre implementazioni sarebbero utili per la comunità.

+6

Nota che qualsiasi istruzione sulla sicurezza del thread è specifica dell'implementazione (e forse anche specifica della versione). Probabilmente è più semplice supporre che nulla sia sicuro per i thread eccetto che per prendere e rilasciare un lucchetto. – delnan

risposta

15

Suppongo che stai usando CPython qui.

purché non vi siano personalizzati __contains__ o __iter__ gancio passa dietro in Python o i valori si prova contro contenuta in lista utilizzare personalizzate __eq__ ganci implementati nel codice Python, l'operatore in può essere gestito interamente in C, ed è solo un codice operativo.

Ciò rende l'operazione interamente thread-safe; I thread Python commutano solo tra gli opcodes; il GIL (global interpreter lock) normalmente si sblocca solo tra gli opcode.

Detto questo, se si utilizza in su un tipo C personalizzato che sblocca GIL quando il controllo del contenimento non sarebbe thread-safe.

In altre parole: il test in bytecode è bloccato, ma se l'operatore deve chiamare codice Python (attraverso __contains__, scorrendo con __iter__ quando nessun __contains__ implementazione è disponibile o se i valori sono prova contro __eq__ ganci implementate in Python) , quindi l'operazione non è thread-safe.

Per altre implementazioni Python, il modo in cui viene gestita la filettatura può variare notevolmente. Certamente, Jython e IronPython non hanno GIL, e dovresti pensare che l'operazione sia non thread safe.

+0

's/Python/CPython/g' – delnan

Problemi correlati