0

私は大量のデータを噛むための小さなパイプラインを作成しており、python を使用して複数のコアを使用してプログラムを呼び出すことにしました。

だからここに私の質問があります:

1) プログラムは非常に大きなテキスト ファイルを出力します。出力を新しいファイルに保存したいだけです (したがって、文字列を python オブジェクトとして保存しないでください)。 subprocess モジュールを使用してこれを行う最良の方法は何ですか?

2) マルチプロセスモジュールを使用して、プログラムを並行して何度も呼び出したい。通常は単純な方法で Pool.map 関数を使用しますが、これは subprocess モジュールに干渉しますか?

前もって感謝します!

4

1 に答える 1

4

1) プログラムは非常に大きなテキスト ファイルを出力します。出力を新しいファイルに保存したいだけです (したがって、文字列を python オブジェクトとして保存しないでください)。 subprocess モジュールを使用してこれを行う最良の方法は何ですか?

documentationを見ると、有効な値は次のstdoutとおりです。

PIPE、既存のファイル記述子 (正の整数)、既存のファイル オブジェクト、および None。

そう:

with open('new_file.txt', 'w') as outfile:
    subprocess.call(['program', 'arg'], stdout=outfile)

2) マルチプロセスモジュールを使用して、プログラムを並行して何度も呼び出したい。私は通常、単純な方法で Pool.map 関数を使用しますが、これは subprocess モジュールに干渉しますか?

あなたが特定の奇妙なことをしない限り、そうではありません。

multiprocessing.Pool作成したプロセスを追跡し、他の場所で作成された他の子プロセスを管理しようとしないため、心配していることは明らかです。

私が見た中で最も一般的な問題は、 を使用Popenして、取得することのない子プロセスを作成することです。のないアプリではこれでうまくいくことがよくありますが、プール タスクで -and-leakmultiprocessingを実行するとすぐに、うまくいかなくなります。Popen(これは実際には Python とは関係ありませんmultiprocessing。単に、孫プロセスが子プロセスと同じではないということです。)

于 2013-09-25T18:31:13.277 に答える