質問

私は美しいマルチスレッドスクリプトを書きました、そして、私がそれを実行したとき、それはスレッドハンドラーの直接の呼び出しよりも25のスレッドで悪化しました。

次に、グローバルな通訳ロックを発見しました。このスクリプトのためにPythonを捨てて、他の何かで物を書き直す前に、Pythonで実際に動作するマルチスレッドを行う方法はありますか?

役に立ちましたか?

解決

他のアプローチは、スレッドを放棄し、代わりに マルチプロセッシング モジュール(Python 2.6+)は、GILを回避し、少なくともスレッドモジュールのAPIに似たAPIを備えています。

他のヒント

今、これは興味深い質問です - ストレートcpythonでギルを逃れることはないと思います。

スタックレスパイソン Cpythonの「並行性」パフォーマンスが改善されたと思われます。 Microthreads, 、しかし、私はそれがギルを逃れるとは思わない。

さらに、によると python.orgのギルページ, 、JythonとIronpythonにはギルがありません。

正解は、あなたがしていることに大きく依存します。

圧縮や画像レンダリングなどのCPUバウンド(およびIOバウンドのブロック)タスクは通常、ネイティブコードで行われ、ネイティブライブラリは通常、作業中にGILをリリースします。 CPU集約型の作業を狭いネイティブコールに分離できると、同時性、カウントされるネイティブパフォーマンス、およびPythonでコードのほとんどを書くことの利便性が得られます。

すべてのコードには、ネイティブライブラリにきちんと実装できる小型の隔離可能な計算コードがあるわけではありませんが、多くのコードがあります。

Cpython(CでのPythonの実装)では、私の知識によると、いいえ。 (私が間違っている場合は、私を修正してください、私は確かに解決策が存在するかどうか知りたいです!)

Ironpython(.net)またはJpython(Java/JWM)に興味があるかもしれません。私はそれらを使用していませんが、少なくとも1つは特定の実行環境に固有のスレッドをサポートしていると思います。

試してみることができます マルチプロセッシング モジュールは、問題に適用できる場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top