2016-07-14 5 views
2

GILが存在するため、Pythonで真の並列性を持つことは可能ですか?私が知る限り、各スレッドは実行前にGILを取得していますが、他のスレッドはGILが解放されるまで待機しています。なぜそれがそのようなボトルネックであるならGILを持っているのですか?Pythonの真の並列性

+0

[David BeazleyのGIL research](http://www.dabeaz.com/GIL/)を参照してください。 – mshildt

答えて

5

Pythonでは、言語は必ずしもGILを強制するとは限りません。それはGILを持っているかもしれないし、持っていないかもしれない言語の異なった実装です。

CPython(事実上の実装)にはGILがあります。したがって、あなたが本当に並列スレッドを使用している間、それを持つことはできません。ただし、マルチプロセッシングを使用して並列性を得ることができます。 PyPyは、言語のもう一つの実装にもGILを持っています。

GILを持たないPython言語(たとえば、Jython & IronPython)の実装があり、スレッドを使用して並列処理を実行できます。

CythonにはGILがありますが、withステートメントを使用してリリースすることができます。言及したプロジェクトの

リンク:このトピックの

その他のリソース:

+0

なぜcpythonがGILを使うことにしたのですか? GILから何が得られるのか –

+0

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

+1

@FaizHalde:ウェブ上のトピックに関する何百もの記事があります –

1

私はここ読んで開始することをお勧めしたい、PythonでGILを学びたい:

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

セクションは、PythonはまだGILを持っている理由を説明するためにGILを排除参照してください。

+1

BTW: "python gil"を検索し、最初の結果... SOに投稿するよりも速いかもしれません...;) – Felix