Frage

Wenn nicht, kann ich eine Möglichkeit garantieren, die Sicherheit der Threads zu garantieren, indem ich auf eine bestimmte Weise programmiert werden?

Um zu verdeutlichen, wenn ich über "ThreadSafe" spreche, meine ich Python-Threads, keine Threads auf OS-Ebene.

War es hilfreich?

Lösung

Es hängt alles von der Wechselwirkung zwischen Ihrem Cython -Code und Pythons GIL ab, wie ausführlich dokumentiert hier. Wenn Sie nichts Besonderes tun, respektiert der Cython-erzeugte Code den GIL (ebenso wie eine c-codierte Erweiterung, die die GIL-freisetzenden Makros nicht verwendet). Das macht einen solchen Code "so threadsafe wie Python-Code"-was ist nicht viel, aber einfacher zu handhaben als vollständig freien Threading-Code (Sie müssen immer noch die Zusammenarbeit und Synchronisation mit Multi-Threaded- Sperren & c).

Der Code, der den GIL und noch nicht erworben hat, darf in keiner Weise mit der Python-Laufzeit und den Objekten, die die Python-Laufzeit verwendet, in keiner Weise interagieren-dies gilt für Cython genauso gut wie für Coded-Erweiterungen. Der Vorteil ist natürlich, dass ein solcher Code auf einem separaten Kern ausgeführt werden kann (bis er natürlich wieder mit der Python -Laufzeit synchronisiert oder in irgendeiner Weise kommuniziert muss).

Andere Tipps

Pythons globales Dolmetscherschloss bedeutet, dass nur ein Thread im Interpreter zu jeder Zeit aktiv sein kann. Sobald die Kontrolle jedoch an eine C -Erweiterung übergeben ist, kann ein anderer Thread innerhalb des Interpreters aktiv sein. Es können mehrere Themen erstellt werden, und nichts verhindert, dass ein Thread in der Mitte eines kritischen Abschnitts unterbrochen wird. N

Auf Thread-sicherer Code kann im Interpreter implementiert werden, sodass nichts über Code, das im Interpreter ausgeführt wird, von Natur aus Thread sicher ist. Der Code in C- oder Pyrex -Modulen kann weiterhin Datenstrukturen ändern, die für den Python -Code sichtbar sind. Native Code kann natürlich auch Threading -Probleme mit nativen Datenstrukturen haben.

Sie können die Sicherheit der Threads nicht garantieren, die über das geeignete Design und die Synchronisation hinausgeht - der GIL auf dem Python -Dolmetscher ändert dies nicht wesentlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top