問題タブ [gil]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1496 参照

pypy - PyPyのGILはどこにありますか?

PyPy GILはRPythonのPyPyインタープリター実装の一部ですか、それともtranslate.pyが自動的に追加するものですか?つまり、RPythonで独自の新しい言語インタープリターを作成し、それをtranslate.pyで実行した場合、それは事前にGILの対象になるのでしょうか、それとも私のインタープリターコード次第でしょうか?

0 投票する
2 に答える
1337 参照

python - file.read()マルチプロセッシングとGIL

Cで実装された特定のPython関数(file.read()が含まれていると思います)は、動作中にGILを解放し、完了時に元に戻すことができることを読みました。そうすることで、複数のコアを利用できます。再利用可能。

マルチプロセスを使用してコードを並列化しています。現在、親、ファイルからデータを読み取る子、最初の子プロセスから渡されたデータからチェックサムを生成する子の3つのプロセスがあります。

この権利を理解していれば、現在行っているようにファイルを読み取るための新しいプロセスを作成する必要はないようです。メインプロセスで呼び出す必要があります。問題は、私がこの権利を理解しているかどうか、そして読み取りをメインプロセスまたは別のプロセスに保持することでパフォーマンスが向上するかどうかです。

したがって、処理するデータを読み取ってパイプ処理する関数を指定すると、次のようになります。

これは間違いなく複数のコアを利用すると思いますが、オーバーヘッドも発生します。

しかし今、これを行うだけで、オーバーヘッドを除いた複数のコアも使用されるのではないかと思います。

どちらがより速く、どのような理由で誰もが持っている洞察は大いにありがたいです!

0 投票する
1 に答える
982 参照

python - 埋め込まれたPythonモジュールを使用したC++でのマルチスレッド

ブーストスレッドを起動してマルチスレッドプログラムを作成しようとしています。このスレッドは、Pythonモジュールを呼び出す関数を呼び出しますが、PyGILState_Ensure()ロックを取得し、無期限に解放されるのを待つため、プログラムはそこでハングします。ここで何が悪いのか教えてください。

ええ、実際には、Pythonモジュールが別のスレッドで別のPythonモジュールを呼び出すC ++コードを呼び出します。そのため、PyGILがリリースされるのを待っているとデッドロックが発生すると思います。したがって、PyGILを削除するためのパッチを使用することで解決策はありますか?

0 投票する
2 に答える
1025 参照

multithreading - mod_wsgi は単一の Python インタープリターで実行されますか?

スレッドに大きく依存している django アプリケーションを使用していますWSGIDaemonProcess

そこにイエス/ノーの答えが見つからず、疑問に思っています。mod_wsgi がリクエストごとに同じインタープリターを使用しているため、GIL の制限によりボトルネックが発生している可能性がありますか?

もしそうなら、この制限を回避するのに役立つ何か他のものをお勧めしますか?

0 投票する
3 に答える
1167 参照

python - マルチスレッドPythonのC拡張機能はパフォーマンスを向上させることができますか?

マルチコアマシンで一度にPythonバイトコードを実行できるPythonスレッドは1つだけであるという、PythonのGIL問題について聞いたことがあります。したがって、マルチスレッドのPythonプログラムはお勧めできません。

pthreadプログラムのパフォーマンスを向上させる可能性のあるC拡張機能を作成できるかどうか疑問に思っています。C拡張機能にスレッドを作成し、Pythonのメインスレッドと並行して実行したいと思います。

私の仮定では、PythonメインスレッドはIOに関連することを実行しますがpthread、私のC拡張機能ではほとんどの時間を計算に費やします。Pythonメインスレッドは、キューを使用してC拡張機能のスレッドと通信します(プロデューサーコンシューマーモデルのように)。

PythonとC拡張機能を備えたマルチスレッドに違いはありますか?

0 投票する
2 に答える
25333 参照

python - グリーンスレッドとPythonのスレッド

ウィキペディアが述べているように:

グリーンスレッドは、ネイティブOS機能に依存せずにマルチスレッド環境をエミュレートし、カーネルスペースではなくユーザースペースで管理されるため、ネイティブスレッドがサポートされていない環境で動作できます。

Pythonのスレッドはとして実装されpthreads (kernel threads)、グローバルインタープリターロック(GIL)のため、Pythonプロセスは一度に1つのスレッドのみを実行します。

[質問]しかしGreen-threads(またはいわゆるグリーンレットまたはタスクレット)の場合、

  1. それらにGIL影響を与えますか?一度に複数のグリーンレットを実行できますか?
  2. グリーンレットまたはタスクレットを使用する際の落とし穴は何ですか?
  3. グリーンレットを使用する場合、プロセスで処理できるグリーンレットはいくつですか?(1つのプロセスで、* ixシステムに設定されているulimit-s-v )までのスレッドを開くことができるので疑問に思い ます。)

私は少し洞察が必要です、そして誰かが彼らの経験を共有するか、正しい道に私を導くことができればそれは助けになるでしょう。

0 投票する
1 に答える
89 参照

python - Python GIL:式のすべての参加者は、式の期間中に参照カウントが増加しますか?

単純な C++ クラスがあるとします。

Widget::sleepブロックなので、Python が他のことをできるように GIL を解放したいので、次Widget::sleepのような関数でラップしました。

完全を期すために、バインディング コードは次のようになります。

次のような単純な Python スクリプトがあります。

エクスプレッションのすべての参加者は、エクスプレッションの期間中、参照カウントがインクリメントされますか? c.xで使用される場合の唯一の指示対象C.foocであり、後の行でt.start()都合よく削除されます。pyWidgetSleepGIL を解放してからdel c.x、インスタンスへの最後の参照をデクリメントし、Widget未定義の動作を引き起こす可能性があります。


私のマシンではこのブレークを作成できません。これは、期待どおりに動作することを示す良い兆候のようですが、参照カウントはこの程度明確に文書化されていません (または、少なくとも、できる.見つからないようです)。CPython の関連部分は のように見えます。これは、関数呼び出しに関係するすべての引数にPyEval_EvalCodeEx適用されるように見えますが、私はそれについて完全にオフになっている可能性があります。Py_INCREF

0 投票する
1 に答える
1710 参照

python - スレッドセーフなメモ化デコレータ

複数のスレッドで動作するメモ化デコレータを作成しようとしています。

スレッド間の共有オブジェクトとしてキャッシュを使用し、共有オブジェクトを取得/ロックする必要があることを理解しました。もちろん、スレッドを起動しています。

労働者はどこにいますか:

もちろん、メモ関数で装飾された関数(このような)を同時に多くのスレッドに送信すると、問題が発生します。

メモのキャッシュをスレッド間の共有オブジェクトとして実装するにはどうすればよいですか?

0 投票する
1 に答える
1051 参照

python - GIL がスレッドを切り替えないように強制する

マルチスレッドのCPythonコードをプロファイリングしています。
特定のコード セグメントの実行にかかる時間を測定するために、GIL (Global Interpreter Lock)がそのセグメントのスレッド間で切り替えないように強制したいと考えています。これはどのように行うことができますか?

更新:
次の疑似コードを想定します。

私の懸念は、インタープリターが「タイム クリティカルな」プロファイリング期間中にスレッドを切り替えることです。

0 投票する
1 に答える
2302 参照

python - Pythonと真の並行スレッド

私は何時間も読んでいて、Pythonマルチスレッドがシングルスレッドよりもどれほど速いかを完全に理解することができます。

質問は本当にGILから生じています。GILがあり、一度に1つのスレッドだけが実際に実行されている場合、マルチスレッドはシングルスレッドよりもどのように高速になりますか?

いくつかの操作でGILがリリースされることを読みました(ファイルへの書き込みなど)。それがマルチスレッドを高速化する理由ですか?

そして、グリーンレットについて。それらは並行性にどのように役立ちますか?これまでのところ、私が彼らに見ているすべての目的は、関数とそれほど複雑でないyield関数を簡単に切り替えることです。

編集:そして、世界でトルネードのようなサーバーは何千もの同時接続をどのように処理できますか?