問題タブ [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.
database - djangoモデルを保存するための別のスレッド
リモートデータベースを使用するアプリケーションを構築しています。タイプAのオブジェクトをデータベースに保存し、データベースからタイプBのオブジェクトを読み取ります。
モデルを保存するとGILがブロックされて解放される可能性があり、アプリケーションは保存されたオブジェクト自体を使用しないため、呼び出しを.save()
別のスレッドに移動したいと思います。
Djangoは一般的にスレッドセーフではないことを私は知っています。だから私の質問は-他のスレッドがタイプAのオブジェクトを保存している間にタイプBのオブジェクトをクエリすることに問題はありますか?
python - GIL をスレッド プールとして使用する
注: このトピックに関する私の知識が不足しているため、素朴な仮定をしている可能性があります。
ブロッキング I/O を実行する関数があるとします。この関数を n 回実行する必要があります。
(threading モジュールを使用して) n 個のスレッドを単純に生成し、それらを同時に開始する場合、multiprocessing.pool モジュールを使用するのではなく、GIL を使用して (I/O に基づいて) スレッドを管理するだけでうまくいきますか?サブプロセスを管理するには?
python - 引数によって提供される時間に基づいてPythonで関数を実行する方法
seconds引数で指定された時間に基づいてPythonで関数を実行する方法。
私が考えているように、time.clock()はここでは本当に役に立ちません。なぜなら、関数は非常に難しい可能性があり、結果を表示したり中止したりするためにカウンタータイマーに到達することは決してないからです。
スレッドモジュールを使用する必要がありますか?私はスレッドについてあまり知りませんが、私が読んだことから、GILによると1つのスレッドしか動作できず、このプロセスには実際には同時に2つのスレッドが必要です..または私が知らない他のトリック。
python - Python GIL とマルチスレッド
単一スレッドのアプリケーションを作業スレッドの数に分割したいと考えています。1 つだけ質問があります。このアクションのパフォーマンスはどうですか? GIL が Python が一度に複数のスレッドを実行するのを防いでいる場合、利益はありますか?
別のポイント (c/c++ の観点から) - とにかく、各スレッドは排他的にしか実行できないことがわかっているため、Python インタープリターよりも下位レベルでは同じ制限があります。
要約: Python スレッドは、タスク切り替えの一部で「ネイティブ」スレッドよりも効率が低くなりますか?
python - スレッドが現在 GIL を保持しているかどうかを確認するにはどうすればよいですか?
現在のスレッドがグローバル インタープリター ロックを持っているかどうかを教えてくれる関数を見つけようとしました。
Python/C-API ドキュメントには、そのような関数は含まれていないようです。
私の現在の解決策は、現在のスレッドによって取得されなかったロックを解放しようとしないためPyGILState_Ensure()
に、解放する前に使用してロックを取得することです。PyEval_SaveThread
(ところで、「致命的なエラーを発行する」とはどういう意味ですか?)
この質問の背景: Python を組み込んだマルチスレッド アプリケーションがあります。ロックを解放せずにスレッドを閉じると (クラッシュが原因で発生する可能性があります)、他のスレッドはそれ以上実行できなくなります。したがって、スレッドをクリーンアップ/クローズするときに、このスレッドによってロックが保持されているかどうかを確認し、この場合は解放したいと思います。
回答ありがとうございます。
python - CythonでマルチスレッドC関数を呼び出す方法は?
Cython でマルチスレッド C 関数を呼び出す方法について質問があります。
C関数でマルチスレッド処理を行う前後に、GILを解放/取得する必要がありますか?
または、通常の C 関数のように使用できますか?
一般的な Python 拡張機能については、こちらの指示に従う必要がありますか?
python - ロックとパフォーマンスのPythonコスト(マルチスレッドは意味がありますか?)
私は自分のコードのスループットが非常に重要なプロジェクトに取り組んでおり、いくつかの検討の結果、プログラムをスレッド化することを選択しました。
メインスレッドとサブスレッドは両方とも、2つの共有辞書を追加および削除します。Pythonでのロックのパフォーマンス、遅い操作などを考慮して、いくつかの入力についてインターウェブを調べてきました。
したがって、Pythonは実際にはまったくスレッド化されていないので(GILは1つのコアでのみ機能すると考えて)、アプリケーションで高いパフォーマンスが必要な場合は、IOの処理以外にスレッド化することで勝つことができますか? ?
編集
実際の質問は(洞察に満ちたコメントの後)です
GILがあるので、マルチスレッドはPythonで意味がありますか?
python - バックグラウンド スレッド python/pygtk で計算を実行する
時間のかかる命令中に Python の残りの部分をロックダウンすることなく、バックグラウンドで Python スレッドを実行する方法はありますか?
Python (pygtk) アプリケーションのバックグラウンド スレッドで時間のかかる計算を実行しようとしています。スレッドの仕組みを理解しています。問題は、任意のスレッドで高価な操作を実行するたびに (例: PIL の大きな画像の image.load() )、別のスレッドであっても、操作が完了するまですべての python スレッドをブロックすることです。
それで、Pythonの残りの部分をロックダウンせずにバックグラウンドでPythonスレッドを実行する方法はありますか? (GUI がロックダウンされない限り、どれだけ時間がかかるかは気にしません。GUI が一度に数秒間応答しなくなることはありません)。私の問題は、長い時間がかかる単一のコマンド(image.load()など)にあるため、スリープステートメントを使用しても機能しません。
pypy - PyPyのGILはどこにありますか?
PyPy GILはRPythonのPyPyインタープリター実装の一部ですか、それともtranslate.pyが自動的に追加するものですか?つまり、RPythonで独自の新しい言語インタープリターを作成し、それをtranslate.pyで実行した場合、それは事前にGILの対象になるのでしょうか、それとも私のインタープリターコード次第でしょうか?
python - file.read()マルチプロセッシングとGIL
Cで実装された特定のPython関数(file.read()が含まれていると思います)は、動作中にGILを解放し、完了時に元に戻すことができることを読みました。そうすることで、複数のコアを利用できます。再利用可能。
マルチプロセスを使用してコードを並列化しています。現在、親、ファイルからデータを読み取る子、最初の子プロセスから渡されたデータからチェックサムを生成する子の3つのプロセスがあります。
この権利を理解していれば、現在行っているようにファイルを読み取るための新しいプロセスを作成する必要はないようです。メインプロセスで呼び出す必要があります。問題は、私がこの権利を理解しているかどうか、そして読み取りをメインプロセスまたは別のプロセスに保持することでパフォーマンスが向上するかどうかです。
したがって、処理するデータを読み取ってパイプ処理する関数を指定すると、次のようになります。
これは間違いなく複数のコアを利用すると思いますが、オーバーヘッドも発生します。
しかし今、これを行うだけで、オーバーヘッドを除いた複数のコアも使用されるのではないかと思います。
どちらがより速く、どのような理由で誰もが持っている洞察は大いにありがたいです!