Einschränkung, wieviel % CPU die Python VM bekommt ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Hi,

so wie ich das lese ist praktisch jeder CPython code thread safe ....

Stimmt das ?

Wenn also 2 threads in die selbe List append, ich mich um keinen Lock o.ä. kümmern brauche - Da ja einer der Threads das GIL hält bis seine op fertig ist und erst dann eventuell abgibt ,,, ?

Und 2te Frage, kann ich erzwingen das ein Python Thread (keine C ext.) ohne GIL auskommt wenn ich mir absolut sicher bin das er nicht auf die selben Daten eines anderen Thread zugreift ?
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

so wie ich das lese ist praktisch jeder CPython code thread safe ....

Stimmt das ?

Wenn also 2 threads in die selbe List append, ich mich um keinen Lock o.ä. kümmern brauche - Da ja einer der Threads das GIL hält bis seine op fertig ist und erst dann eventuell abgibt ,,, ?
Ja und nein. Bei "atomaren" Operationen in Python-Bytecode wie das Anhängen an eine Liste: ja. Bei "nicht atomaren" Operationen (die also aus mehreren Python-Bytecodes bestehen, wie zum Beispiel wenn Du eine eigene Python-Klasse mit überschriebenem __setitem__ hast): nein. Der Python-Interpreter gibt nach einer gewissen Zeit Bytecode interpretieren automatisch die GIL ab (das sind im Normalfall 100 Anweisungen soweit ich weiß), damit auch ein anderer Thread laufen kann.
Und 2te Frage, kann ich erzwingen das ein Python Thread (keine C ext.) ohne GIL auskommt wenn ich mir absolut sicher bin das er nicht auf die selben Daten eines anderen Thread zugreift ?
Nein. Weil das ganze Objekt-Modell (im besonderen der GC) nicht thread-safe ist kannst Du aus nicht mehr als einem Thread gleichzeitig Dinge an Python-Daten (im allgemeinen, nicht im speziellen an den selben Daten) verändern. Das bedeutet dass wenn Du die GIL abgibst, Du auch nicht mehr auf den Python-Interpreter zugreifen _darfst_! Was natürlich auf jeden Fall der Fall ist wenn Du weiterhin Python-Bytecode ausführst.

--- Heiko.
Antworten