2013-01-10 6 views
5

私は、要素のすべての組み合わせを処理する、配列のペアを反復処理する、メモリを必要とするアプリケーションを持っています。現在、このスクリプトは非常にRAMが必要です。それは約3GBのRAMを使用して終了します。1つの大きなプロセスまたは多くの小さなプロセスで、メモリ使用率が向上していますか?

は、私の質問はこれです:

は、一つの大きなプロセスにおける各要素の組み合わせを処理するために多くのメモリ効率的ですか?または、各組み合わせに対して新しいサブプロセスを開始する方がよいでしょうか。 "より良い"、私は意味 "を使用少ないRAM" と

import subprocess 

for i in param_set1: 
    for j in paramset2: 
     subprocess.call([Do_A_Big_Job_Script, i, j]) 

for i in param_set1: 
    for j in paramset2: 
     Do_A_Big_Job(i, j) 

またはオプション2:つまり

は、それがより良いオプション1を行うことです。

ありがとうございます!

私は明らかにメモリ使用について興味があります。プロセスが終了すると、UNIXシステムはそのメモリを解放しますか?これは、の合理的には書かれたスクリプトのpythonのガベージコレクションよりも効率的ですか?私は利用可能なコアがたくさんないので、私は複数のプロセスが多かれ少なかれ並列に実行することを期待します。

+1

メモリの使用量は、あなたの "仕事"(あなたが割り当てて自由にしている変数)に何をしているのかに敏感です。各ジョブが大量のメモリを使用している場合、それらを並列に実行するとメモリスタックが作成されます。唯一の冒険はそれがより速いかもしれないということです。 – asermax

+0

私はそれを答えとして掲示しますが、本当に答えがxDであるとは思わない私は間違ったことに疑問を呈しているかもしれないと指摘していました。あなたの編集はより正確な質問と思われ、その話題を知っている人を待つ価値があります。 Btw、いくつかのタグの追加、質問を見つけやすくするために役立つでしょう(UNIX、メモリ、サブプロセスなど) – asermax

答えて

1

1つのプロセスを実行するとRAMの使用量は少なくなりますが、複数のCPU /コアを利用するのは難しくなります。

どれくらい時間がかかっても構わない場合は、1つのプロセスを実行してください。

妥協点として、一度にすべてを起動するのではなく、一度にいくつかのプロセスを実行することができます。

関連する問題