7

次の問題に直面しています: サプライ チェーンのシミュレーターを実装しようとしています。これらは多くの EPCIS イベント (RFID リーダーで発生するイベント) を生成します。これらのイベントは、データベースにロードして分析アルゴリズムを実行するために、csv ファイルに書き込む必要があります。

シミュレーターは python を使用して実装されており、正常に動作します。私が今やろうとしているのは、ディスクへのアクセスに必要な時間を短縮するために、ファイルへのイベントの書き込みをバッファリングすることです。Python のドキュメントを参照していると、io.BufferedWriter を偶然見つけました。これは、私が探していたものとまったく同じように聞こえます。とにかくなかなか手が出せない。

これが私がこれまでにしたことです。CsvWriterRawIOBase から継承し、ファイル ハンドルを管理するクラスを実装しました。インスタンス化さ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)

これを修正する方法を教えてください。

4

0 に答える 0