2016-04-13 21 views
0

私は私の他のプロジェクトのいずれかの分散コンピューティングモデルを開発するために働いているプロジェクトがあります。私のスクリプトの1つはマルチプロセスで、ディレクトリの変更を監視し、ピクルスをデコードし、それらが向いているノードに基づいて認証キーを作成し、再ピックアップします。 (編集:これらのプロセスはすべて、ループで動作します。)OSXでのアクティビティモニタを見ているとき(Unixの/ Pythonの)アクティビティモニタの%のCPU

私の質問は、私%のCPUの欄には、スクリプトを実行する主要なプロセスのための100%を表示しています。 100%を示すこれらの3つはマネージャスクリプトと2つのノードです(私は1台のマシン上でモデルをシミュレートしていますが、将来はモデルをライブクラスタネットワークに移動することを意図しています)。この悪いですか?私のシステム使用率は27.50%、ユーザーは12.50%、アイドルは65%です。

私は最初に、自分自身を研究しようとしてきた、と私だけの考えでは、これらの数字はプロセスが生きている全体の時間のためにCPUを利用して、アイドル状態になることはありませんされていることを表示することです。

は、私はいくつかの明確化を入手してくださいことはできますか?

OSX Activity Monitor

コメントに基づいて更新: 私のプロセスが管理プロセス/スクリプトから新しい「ジョブを」(受信するためには、それぞれのディレクトリ内のファイルへの変更を監視し、無限ループで実行されますプロジェクトの最終実装ではクラスタ内の別のコンピュータ)。あまりにも多くのプロセッサ時間を必要としないこの形式のI/Oを待っている方が良いでしょうか?

+1

私はあなたの結論に同意するものとします。そこに無限ループがありますか?あなたがIOを監視し、あなたのタイムアウトが0であれば、それはすぐにタイムアウトし、(IOを待つのではなく)100%のpythonの処理が忙しくなります。 – syntonym

+0

それでは、悪いことではありませんか?はい、私のループは無限です、マネージャーとノードは常に関連するファイルの特定のディレクトリをチェックしています。メインプロジェクトの最終実装では、マネージャはさまざまな入力形式(IMAP、STDIN、XMPP、Web、Voiceなど)を常に監視し、これらの入力を「ジョブ」としてクラスタ内の処理対象ノードに配布しますので、私は真の並列コンピューティングを使用することができます(つまり、1つのジョブにノードの "全体" CPUを使用します)。私は質問を更新します。 –

+0

ループ内に小さなスリープを置くと、待ち時間を追加せずにCPUを大幅に向上させることができます。 – tripleee

答えて

0

ソリューション(ただし次善):0.1秒間各ループの端におけるtime.sleep(n)期間を実装。 CPU時間を0.4%以下に抑えました。

しかし、Python標準ライブラリに含まれていないモジュールを使用せずに、CPU時間を短縮する最適な方法を探していますが、システムを欲しいのでtime.sleep(n)というピリオドを使用しないでください入力ファイルの負荷が非常に高くなった場合、ファイルを処理できる時間が浪費されないようにしたいと考えています。

私のプロセスがビジーウェイトで動作し、それは彼らが過度のCPU時間を使用さ​​せた。

while True: 
    files = os.path.listdir('./sub_directory/') 

    if files != []: 
     do_something() 

これは私が実行しています各スクリプト/プロセスの基礎となっています。

関連する問題