首页 > 解决方案 > 一秒内写入数据日志时改进python尾日志

问题描述

我编写了一个尾日志的方法

例如

def getTailLog(self):

    with open(self.strFileName, 'rb') as fileObj:
        pos = fileObj.seek(0, os.SEEK_END)

        try:

            while True:

                if self.booleanGetTailExit:
                    break

                strLineContent = fileObj.readline()
                if not strLineContent:
                    continue
                else:
                    yield strLineContent.decode('utf-8').strip('\n')
        except KeyboardInterrupt:
            pass

这种方法可以tail log,但是一秒内有大量数据写入日志文件时会延迟甚至卡住

那我该如何修理

多谢

标签: python-3.xfileloggingtail

解决方案


老实说,我不完全理解你的意思delay even stuck when massive data writer into log file in one second

您的代码包含可能永远运行的 while 循环。看起来您的代码正在等待将行附加到文件末尾self.strFileName。问题是它不只是等待。它不断检查文件的内容。这就是所谓的 CPU 绑定操作,它可能会导致在同一进程中读取/写入的巨大延迟(根据我的经验,对于 100 KB 二进制文件最多 10 秒)。由于 GIL(全局解释器锁),Python 具有这种行为。

要解决您的问题,您应该将 while 循环实现替换为另一个 - 您可以使用调度(至少在连续检查之间暂停)或事件驱动方法(如果您知道何时将新行添加到文件中)。


推荐阅读