Ist die Python GIL wirklich pro Interpreter?

9

Ich sehe oft, dass die Leute reden, dass die GIL per Python Interpreter ist (auch hier im Stackoverflow).

Aber was ich im Quelltext sehe, scheint zu sein, dass die GIL eine globale Variable ist und daher für jeden Interpreter in jedem Python-Prozess eine GIL existiert. Ich weiß, dass sie das gemacht haben, weil es kein Interpreter-Objekt wie Lua oder TCL gibt, es wurde einfach nicht gut am Anfang entworfen. Und lokaler Thread-Speicher scheint für die Python-Leute nicht tragbar zu sein.

Stimmt das? Ich habe mir die Version 2.4, die ich in einem Projekt verwende, kurz angeschaut.

Hatte sich das in späteren Versionen geändert, besonders in 3.0?

    
Lothar 18.10.2009, 15:35
quelle

3 Antworten

8

Die GIL ist in der Tat pro-process, nicht pro-Interpreter. Dies ist unverändert in 3.x.

    
Martin v. Löwis 18.10.2009, 20:25
quelle
2

Vielleicht kommt die Verwirrung zustande, weil die meisten Leute davon ausgehen, dass Python pro Prozess einen Interpreter hat. Ich erinnere mich zu lesen, dass die Unterstützung für mehrere Interpreter über die C-API weitgehend unerprobt und kaum genutzt wurde. (Und als ich es gab, funktionierte nicht richtig.)

    
Kylotan 18.10.2009 18:24
quelle
0

Ich glaube, es ist wahr (zumindest ab Python 2.6), dass in jedem Prozess höchstens ein CPython-Interpreter enthalten sein darf (andere Laufzeiten können andere Einschränkungen haben). Ich bin mir nicht sicher, ob dies ein Problem mit der GIL per se ist, aber es ist wahrscheinlich aufgrund des globalen Zustands oder zum Schutz vor einem konfligierenden globalen Zustand in C-Modulen von Drittanbietern. Aus den CPython API-Dokumenten :

  

[Py

dcrosta 18.10.2009 16:09
quelle

Tags und Links