1

別の入力ファイルを使用して別のプログラムを実行することを繰り返すラッパーを作成しようとしています。プログラム (私は制御できませんが、使用する必要があります) は、入力ファイルと同じディレクトリから実行する必要があります。これまでの私の方法は、OSモジュールを使用してディレクトリ構造を変更/作成し、apply-asyncを使用してサブディレクトリを指定してプログラムを実行し、apply-asyncの各子がディレクトリを変更してファイルを作成し、最初の8つのプロセスを実行することです正常に実行されます(8つの仮想コアがあります)

ただし、これらのプロセスを最大 100 個キューに入れています (数分かかるシミュレーションを実行します。最適化を検討しています)。実行している外部実行可能ファイルで「呼び出し」を使用します。すべてが順調に進んでいると思っていましたが、8 回目のシミュレーションの実行後にすべてが停止し、実行中のプロセスが 0 であることを確認しました。キューが他のプロセスを忘れているかのようです。

これを修正するにはどうすればよいですか? 私のRAMは8GBのうち約300MBしか上がらないことを知っています。

シミュレーション実行可能ファイルの終了コードを待機するある種のキューを自分で実装することを検討する必要がありますか?

前もって感謝します。

4

1 に答える 1

0

何もないよりはましかもしれません。これは の正しい使用方法を示しておりapply_async()、プロセスよりも多くのタスクを作成しても問題がないことを示しています。これがあなたがやっていることとどう違うのか教えてあげたいのですが、あなたが何をしているのかわかりません;-)

import multiprocessing as mp

def work(i):
    from time import sleep
    sleep(2.0 if i & 1 else 1.0)
    return i*i

if __name__ == "__main__":
    pool = mp.Pool(4)
    results = [pool.apply_async(work, (i,)) for i in range(100)]
    results = [r.get() for r in results]
    print len(results), results
    pool.close()
    pool.join()
于 2013-11-03T05:25:21.717 に答える