python-3.x - 一秒内写入数据日志时改进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,但是一秒内有大量数据写入日志文件时会延迟甚至卡住
那我该如何修理
多谢
解决方案
老实说,我不完全理解你的意思delay even stuck when massive data writer into log file in one second
。
您的代码包含可能永远运行的 while 循环。看起来您的代码正在等待将行附加到文件末尾self.strFileName
。问题是它不只是等待。它不断检查文件的内容。这就是所谓的 CPU 绑定操作,它可能会导致在同一进程中读取/写入的巨大延迟(根据我的经验,对于 100 KB 二进制文件最多 10 秒)。由于 GIL(全局解释器锁),Python 具有这种行为。
要解决您的问题,您应该将 while 循环实现替换为另一个 - 您可以使用调度(至少在连续检查之间暂停)或事件驱动方法(如果您知道何时将新行添加到文件中)。
推荐阅读
- regex - 如何对嵌套的动态键应用 Mongo DB 查找命令
- asp.net - 根据第一个下拉asp.net的选择填充下拉值和项目
- python - 检测嘈杂的背景/对象 - OpenCV
- java - 如何使用 pdfHtml 插件使用 iText 7 或 5 实现 Aztec-barcode?
- laravel - 在具有多个附加搜索过滤器的类似查询中使用数组
- python - 在栅格中查找方向变化的算法
- javascript - js树在处理选中/取消选中事件并将所有复选框设置为true时不起作用
- ios - 我什么时候应该屏蔽 UITableView 部分单元格的角?
- javascript - 我对步骤计数有疑问-reactjs 表单
- jquery - 在 HTML 页面或模板中使用 Django-REST-Framework 从 Django 中创建的 API 获取/显示 API 数据