7

我面临以下问题:我正在尝试为供应链实施模拟器。这些会产生很多 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)

你们中有人知道如何解决这个问题吗?

4

0 回答 0