2011-10-19 11 views
10

私はある時点で同じことを並行して行うさまざまなサブプロセスに分割するパイプラインを持っています。したがって、それらの出力は同じファイルに入れなければなりません。2つのPythonスクリプトが同じファイルに書き込む場合はどうなりますか?

これらのプロセスのすべてが同じファイルに書き込む必要があると言うのは危険ですか?または、このリソースが占有されていると見たら、Pythonは試して再試行しますか?

答えて

7

一般的に、これは良い考えではなく、正しい方向に注意する必要があります。書き込みはシリアル化する必要があるため、スケーラビリティにも悪影響を与える可能性があります。

ファイルを別々にしてマージすることをお勧めします(または、別々のファイルとして残しておくことをお勧めします)。

+0

大丈夫!スケーラビリティにはどのような影響がありますか?突然多くのプロセスが同じファイルに書き込んでお互いを保持したいのであれば? – dmeu

+0

@dmeu:それは基本的にそれです。複数のプロセスが同時に書き込みをしたい場合、そのうちの1つだけが可能になり、残りは有益な作業ではなく待機するだけです。 – NPE

8

これはシステムによって異なります。 Windowsでは、リソースがロックされ、例外が発生します。 Linuxでは、あなたが共有リソースへのアクセスを同期するためにセマフォを使用する必要があるような場合には理想的には、2つのプロセス(書き込まれたデータが混在することができる)

でファイルを書き込むことができます。セマフォを使用すると、ニーズに重すぎる場合には、唯一の選択肢は、別々のファイルに書くことである

...

編集a later postに目で指摘したように、リソースマネージャはに別の代替であります同時作成者の処理

3

より良い解決策は、同じファイルを2回開くことを避けるためにリソースマネージャ(ライター)を実装することです。このマネージャは、一部のプラットフォームでの同時アクセスを避けるために、スレッド同期メカニズム(threading.Lock)を使用できます。

+0

私はこのオプションを調べなければなりません。これはクラスタでも動作します。計算が異なるコンピュータで行われるシステム上で、結果が書かれたファイルシステムを共有することを意味します。 – dmeu

+0

異なるプロセスはスレッドを共有できません。ロック。 – marcv81

1

すべての異なるプロセスが出力をキューに書き込む方法と、そのキューを読み込んでファイルに書き込むプロセスが1つありますか?

関連する問題