4

私たちのシステムでは、9 つ​​のプロセスが同じ CSV 出力を同時に書き込みます。そして、出力速度が速いです。1 日あたり約 1,000 万の新しい行。CSV ファイルを書き込むには、Python2.7 の csv モジュールを使用します。

最近、CSV ファイルにいくつかの行が混在していることに気付きました (次の例を参照)。

例えば

"name", "sex", "country", "email"
...# skip some lines
"qi", "Male", "China", "redice
...# skip some lines
"Jamp", "Male", "China", "jamp@site-digger.com"
...# skip some lines
@163.com"

正しい出力は次のようになります。

"name", "sex", "country", "email"
...# skip some lines
"qi", "Male", "China", "redice@163.com"
...# skip some lines
"Jamp", "Male", "China", "jamp@site-digger.com"
...

この種の紛争を回避するにはどうすればよいでしょうか。

4

3 に答える 3

2

私が知っている直接的な方法はありません。

一般的な回避策の 1 つは、"プロデューサー" と "アウトプッター" の間で責任を分割することです。

マルチプロセス キューから CSV を出力するプロセスをもう 1 つ取得し、すべての「プロデューサー」プロセスをそのキューにプッシュします。

Python の multiprocessing モジュール、特にqueuesに関する部分を確認することをお勧めします。試行中に行き詰まった場合は、ここで新しい質問を提起してください。これはトリッキーになる可能性があるためです。

代わりに、各プロセスがリソースが利用可能になるまで待機する必要がある「巨大ロック」を使用することもできます (たとえば、システム ミューテックスを使用)。これにより、コードが簡単になりますが、スケーラビリティは低下します。

于 2013-11-07T08:18:43.020 に答える
1

Bruce が説明したように、証明された唯一の解決策は、「プロデューサー」プロセスからの出力を受け取り、ファイルに書き込む単一のプロセスを持つことです。キュー/メッセージング システム、または単純な古い SQL データベース (そこから csv ファイルを簡単に出力できます) である可能性があります。

于 2013-11-07T08:22:47.467 に答える
1

最初の最も簡単な試みとして、常に出力を flush() しようとします。これにより、次のデータを受け入れる前に IO がファイルに書き込むようになります。

于 2013-11-07T08:40:37.670 に答える