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.
fonte
2013-11-01 13:37:21
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