2016-07-14 14 views
2

Ist es möglich, in Python echte Parallelität aufgrund der Anwesenheit von GIL zu haben? Soweit ich weiß, erwirbt jeder Thread die GIL, bevor er ausgeführt wird, während andere Threads warten, bis die GIL freigegeben wird. Warum haben GIL, wenn es so ein Flaschenhals istWahre Parallelität in Python

+0

Siehe [David Beazleys GIL-Forschung] (http://www.dabeaz.com/GIL/) für viele tolle Informationen zu diesem Thema. – mshildt

Antwort

5

Python, erzwingt die Sprache nicht unbedingt GIL. Es sind die verschiedenen Implementierungen der Sprache, die GIL haben können oder nicht.

CPython (die de-facto-Implementierung) hat GIL. Sie können also keine wirklich parallelen Threads haben, während Sie sie benutzen. Sie können jedoch Multiprozessing verwenden, um Parallelität zu erzielen. PyPy, eine weitere Implementierung der Sprache, hat jetzt auch GIL.

Es gibt andere Implementierungen der Python-Sprache (Jython & IronPython zum Beispiel), die keine GIL haben, und Sie können Threads verwenden, um parallele Operationen auszuführen.

Cython hat eine GIL, aber Sie können es mit einer with Anweisung freigeben.

Verbindungen der genannten Projekte:

Weitere Ressourcen zu diesem Thema:

+0

Warum cpython entschied, GIL zu verwenden. Welchen Vorteil es von GIL –

+0

http://programmers.stackexchange.com/questions/186889/why-was-python-written-with-the-gil –

+1

@FaizHalde: Es gibt Hunderte von Artikeln über das Thema im Internet –

1

Wenn Sie möchte über die GIL in Python lernen, würde ich vorschlagen hier zu lesen beginnen:

https://wiki.python.org/moin/GlobalInterpreterLock

Siehe Abschnitt die GIL für eine Erklärung Beseitigung warum Python noch die GIL hat.

+1

BTW: Sie finden diese Informationen durch googeln "Python Gil" und klicken Sie auf die erste Ergebnis ... Könnte schneller sein als auf SO zu posten ...;) – Felix