2016-09-08 11 views
2

スクリプトa.pyを使用すると、複数のスレッドでいくつかのタスクが実行されますが、私はa.pyを制御できません。シェルから呼び出すときにPythonスクリプトが使用できる最大スレッドを設定する方法

私は、CPUコアより多くのスレッドを使用するとスクリプトが遅くなることがわかったので、使用できるスレッドの数を制限する方法を探しています。それはのようなものかもしれない

パイソン--nthread = 2 a.py

や私のOSで何かを変更も可能です。要求されたとして、私はUbuntuのに16.04

を使用しています

をa.pyはscikit-学ぶMLPRegressorの中だけのモジュールです。 私はこの質問もhereと尋ねました。

+0

どのようにマルチスレッドのPythonスクリプトを作成しますか?コードスニペットが役立ちます。 – TuanDT

+0

パフォーマンスを向上させるためにスレッド数を制限するという考え方は素朴です。実際に 'a.py'をプログラミングしていた場合、このような微調整はいくつかの特定の状況で役立ちますが、スレッドがより高速で、最高です。 – zvone

答えて

1

のpythonに固有のより一般的な方法ではない:スレッド1-3(合計3)が使用される。この場合

taskset -c 1-3 python yourProgram.py 

。プログラムによって呼び出される並列化は、それらのリソースを共有します。

あなたの正確な問題に合った解決策を見つけるには、コードのどの部分がparellelizeするのが良いかをよりよく特定する必要があります。例えば、それはnumpyのルーチンによるものである場合は、使用して、それを制限することができ:

OMP_NUM_THREADS=4 python yourProgram.py 

を再び、第一の溶液は、一般的およびOSによって処理され、第二は、Pythonは(numpyの)特異的であるのに対し。

0

threadingドキュメントを読んで、それは言った:

はCPythonの実装の詳細:CPythonとは、原因グローバルインタープリタロックするには、一つのスレッドだけが一度に(Pythonコードを実行できていても一定のパフォーマンス指向のライブラリかもしれませんこの制限を克服する)。アプリケーションでマルチコアマシンの計算リソースをより使いたい場合は、マルチプロセッシングを使用することをお勧めします。ただし、複数のI/Oバウンドタスクを同時に実行する場合は、スレッド化は適切なモデルです。

マルチコア処理を利用したい場合は、multiprocessingモジュールを使用するコードをよく更新してください。そして、あなたがスレッドを制限するためのスクリプトコードを更新することができ

python a.py --nthread=2 

:あなたはとにかくスレッドを使用し続けることを好む場合は

は、あなたは次のように引数としてアプリケーションにスレッド数を渡すのオプションを持っています。

関連する問題