Ist %code% Thread-sicher, während %code% in einem anderen Thread geändert werden kann?
Hier finden Sie eine umfassende, aber nicht erschöpfende Liste mit Beispielen von %code% -Operationen und ob sie Thread-sicher sind oder nicht, jedoch konnte ich keine Referenz für das %code% Sprachkonstrukt finden.
Im Hinblick auf die Python-Implementierung verwende ich CPython, aber Antworten für andere Implementierungen wären auch für die Community hilfreich.
Ich gehe davon aus, dass Sie CPython hier verwenden.
Vorausgesetzt, es gibt kein benutzerdefiniertes %code% oder %code% hook, das zurück in Python oder fällt, verwenden die Werte, die Sie gegen in getestet haben, benutzerdefinierte %code% hooks In Python-Code implementiert, kann der %code% -Operator vollständig in C behandelt werden und ist nur ein Opcode.
Dies macht die Operation völlig Thread-sicher; Python-Threads wechseln nur zwischen Opcodes; Die GIL (Global Interpreter Lock) entsperrt normalerweise nur zwischen Opcodes.
Wenn Sie %code% für einen benutzerdefinierten C-Typ verwenden, der die GIL entsperrt, wenn das Containment getestet wird, ist das nicht threadsicher.
Mit anderen Worten: Der Bytecode-Test %code% ist gesperrt, aber wenn der Operator Python-Code aufrufen muss (durch %code% , Iterieren mit %code% , wenn keine %code% -Implementierung verfügbar ist oder die Werte test sind) gegen %code% hooks in Python implementiert), dann ist die Operation nicht Thread-sicher.
Bei anderen Python-Implementierungen kann die Verarbeitung von Threads stark variieren. Natürlich haben Jython und IronPython keine GIL, und Sie sollten davon ausgehen, dass die Operation nicht threadsicher ist.