数値データのみを保持するレコードをフォーマット文字列で固定に変換し、Python でファイルに書き込む最速の方法は何ですか? たとえば、が、、 、、 のrecord
属性を持つオブジェクトで構成される巨大なリストであり、頻繁にそれらを外部ファイルにフラッシュする必要があるとします。フラッシュは、次のスニペットで実行できます。id
x
y
wt
with open(serial_fname(), "w") as f:
for r in records:
f.write("%07d %11.5e %11.5e %7.5f\n" % (r.id, r.x, r.y, r.wt))
ただし、私のコードは外部ファイルの生成に多くの時間を費やしており、フラッシュ間で行うべきことを行う時間が少なすぎます。
元の質問を修正します。
複数の「プロデューサー」システムから情報を取得してグローバル レコード セットを追跡し、レコード セットへの変更をリアルタイムまたはほぼリアルタイムで「コンシューマー」システムに中継するサーバー ソフトウェアを作成しているときに、この問題に遭遇しました。前処理された形で。コンシューマ システムの多くは Matlab アプリケーションです。
これまでに受け取ったいくつかの提案を以下にリストします(感謝します)。いくつかのコメントがあります。
- データセット全体ではなく、変更のみをダンプします:私は実際にこれを既に行っています。結果の変更セットは依然として巨大です。
- バイナリ (または他のより効率的な) ファイル形式を使用します。Matlab が合理的に効率的に読み取ることができるものにかなり制約があり、それに加えて、形式はプラットフォームに依存しない必要があります。
- データベースを使用する:私は実際、特に Matlab 側では遅すぎて扱いにくいと見なされている現在のデータベース ソリューションをバイパスしようとしています。
- タスクを個別のプロセスに分割:現時点では、ダンプ コードは独自のスレッドで実行されています。ただし、GIL のため、同じコアを消費しています。完全に別のプロセスに移動できると思います。