这是一个用python编写的tail -f的简单实现。这个问题就是循环性,这个脚本喜欢占用大量的CPU时间。如果它是一个想要作为分叉进程/守护进程运行的东西,那将是一个低效的开始。
使用Python编写CPU高效尾部的解决方案是什么?
# CPU inefficient tail -f
def main():
filename = '/tmp/foo'
file = open(filename, 'r')
st_results = os.stat(filename)
st_size = st_results[6]
file.seek(st_size)
lastmatch = 0
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line,
答案 0 :(得分:0)
我不知道一方面在Windows之间以及另一方面几乎所有其他系统之间的高效且可移植的实现。几乎无处不在,我使用标准库的select
模块(可以基于系统级功能,例如select,kqueue等),只有当文件发生变化时才会被唤醒,没有投票;但在Windows上,select只能在套接字上工作。因此,在Windows上,我会使用目录更改通知(例如通过ctypes或win32)。