>我编写了一个跟踪日志的方法
例如
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
这种方法可以尾部日志,但当海量数据写入器在一秒钟内进入日志文件时,即使卡住也会延迟
那我该如何修复
多谢
老实说,我不完全理解你所说的delay even stuck when massive data writer into log file in one second
是什么意思.
您的代码包含可以永久运行的 while 循环。看起来您的代码等待将行附加到文件末尾self.strFileName
.问题是它不只是等待。它不断检查文件的内容。这就是所谓的 CPU 绑定操作,可能会导致同一进程中读取/写入的巨大延迟(根据我的经验,100 KB 二进制文件最多需要 10 秒(。Python 之所以有这种行为,是因为 GIL(全局解释器锁(。
为了解决您的问题,您应该用另一个循环实现替换 while 循环实现 - 您可以使用计划(至少在连续检查之间暂停(或事件驱动方法(如果您知道何时向文件添加新行(。