2016-06-02 13 views
0

私は、入力引数に基づいてファイルのいくつかのリストで動作する高いランタイム(1つの仮想コアマシンで1つのスクリプトをテストした場合、4日間)を持つPythonスクリプトを持っています。我々が提供します。単一のマルチコアマシン上の複数のPythonスクリプト

私がテストしたい引数のリストは非常に長く、インフラストラクチャのコストが高いため、それぞれを順番に実行することはできません。

私は自分の12コアマシンで異なる引数でスクリプトを独立して実行しようとしました。

nohup python script.py 1 & 
nohup python script.py 2 & 

と..各プロセスは、独立して各コアに割り当てされ、その上にスクリプトは、任意の作業であろうファイルに重なりがないように2コアは、スタンバイになることを考えて、このような8回競合状態やデッドロックは発生しません。これは、すべてのスクリプトに渡す引数が異なるため、GILに問題はありません。

私が観察したことは、個々のpythonスクリプトが同じペースで実行されていないか、前述のタイムラインに従って実行されていないことです。それもちょうど最後の1〜2日で。 プロセスの残りの部分は、生成されたログファイルから遅れています。

誰かが私のpythonのこの動作を理解する助けてもいいですか?

+0

" すべてを10種類のプロセスは4日以内に終了する必要があります。あなたはそれらを別々に走らせましたか?彼らは処理速度を制限する共通のリソースに依存していますか? –

+0

はい、私は彼らが依存しているファイルのリストを知っていて、それらのすべてが区別されています。それらの間に共通のファイル/リソースはありません。 – lorenzofeliz

+2

プロセッサは、あまり書かれていないプログラム、または計算量が多い(気象または海洋モデル)場合にのみ、ボトルネックになります。マルチコアマシン上で複数のプロセスを起動しても速度が上がらない場合は、処理がIOまたはメモリにバインドされていないかどうか疑問に思うはずです。 –

答えて

0

私はあなたのプログラムとその性能についての詳細を説明し、理解しようと最初に示唆している:

あなたはPythonのラインプロファイラを起動することができ、どのくらいの頻度コードの各行が実行されているどのくらいの速と確認するために使用されていますあなたのスクリプト。

pip install line_profiler 

あなたがそれをした時間が、あなたはメモリ

pip install -U memory_profiler 
pip install psutil 

の分析を開始することができ、「メモリリーク」を見つけるための最も簡単な方法は、このツールobjgraphと呼ばれる素晴らしいツールを使用することですあなたが数を確認することができますこれらのオブジェクトへの参照を保持するコード内の異なる場所をすべて探します。

pip install objgraph 

スクリプトの各部分を理解すれば、あなたのコードの性質についての詳細を記述することができますか?

"マルチコア(またはマルチプロセッサ)コンピュータを利用するには、並列で実行できるように書かれたプログラムと実行時のプログラムが必要ですこれは、実際には複数のコア(およびオペレーティングシステム、あなたのPC上で実行できるオペレーティングシステムはこれを実行しますが)で並列にプログラムを実行することを可能にします。 Pythonのに関連しているものはマルチプロセッシングとマルチスレッドされている。 "

Does python support multiprocessor/multicore programming?

関連する問題