编写一个不使用100%CPU的tail -f python脚本

时间:2009-08-19 02:33:33

标签: python algorithm

这是一个用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,

1 个答案:

答案 0 :(得分:0)

我不知道一方面在Windows之间以及另一方面几乎所有其他系统之间的高效且可移植的实现。几乎无处不在,我使用标准库的select模块(可以基于系统级功能,例如select,kqueue等),只有当文件发生变化时才会被唤醒,没有投票;但在Windows上,select只能在套接字上工作。因此,在Windows上,我会使用目录更改通知(例如通过ctypes或win32)。