次の問題に直面しています: サプライ チェーンのシミュレーターを実装しようとしています。これらは多くの EPCIS イベント (RFID リーダーで発生するイベント) を生成します。これらのイベントは、データベースにロードして分析アルゴリズムを実行するために、csv ファイルに書き込む必要があります。
シミュレーターは python を使用して実装されており、正常に動作します。私が今やろうとしているのは、ディスクへのアクセスに必要な時間を短縮するために、ファイルへのイベントの書き込みをバッファリングすることです。Python のドキュメントを参照していると、io.BufferedWriter を偶然見つけました。これは、私が探していたものとまったく同じように聞こえます。とにかくなかなか手が出せない。
これが私がこれまでにしたことです。CsvWriter
RawIOBase から継承し、ファイル ハンドルを管理するクラスを実装しました。インスタンス化さBufferedWriter
れると、パラメーターとして、それ自体を処理する が作成されraw
ます (すでに問題になっている可能性があります)。
class CsvWriter(AbstractWriter):
def __init__(self, filename):
self.filename = filename
self.file = self.openFile()
self.buffer = BufferedWriter(self, settings.WRITE_THRESHOLD)
何かを書きたいことがわかっている場合write_buffered
、バッファリングと呼びます。これは次のようになります。
def write_buffered(self, data_dict):
self.buffer.write(b';'.join(map(str, data_dict.values())) + '\n')
(私が考えたように)クラス自体write
に実装する必要がある実際のメソッドは次のようになります。CsvWriter
def write(self, data):
if self.file.closed:
self.file = self.openFile()
return self.file.write(data)
問題は、シミュレーターを実行しようとすると、次のエラーが発生することです。
IOError: raw write() returned invalid length -1 (should have been between 0 and 78)
これを修正する方法を教えてください。