使用计时器逐行读取

时间:2015-08-08 05:42:28

标签: python multithreading python-2.7 timer readfile

我试图使用来自txt文件的python计时器按特定间隔读取每一行 但它只读取第一行,并且连续显示

我的代码是

def read():
    try:
        while True:
            fo = open("foo.txt", "r")
            threading.Timer(1.0, read).start()
            line=fo.readline()
            print line
            if len(line)==0:
                break
    except:
        pass
read()

1 个答案:

答案 0 :(得分:0)

问题是你再次打开文件,从第一行开始读取,你读取该行打印它并再次继续循环,这使循环成为一个无限循环。

此外,您使用threading.Timer()进行的操作不是您使用它的方式,threading.Timer()在1秒后在新线程中启动函数read,之后您将加载所有线程都无限期地运行read()函数。

使用threading.Timer()可以轻松完成您尝试做的事情(不使用time.sleep()),让您的程序在特定的秒数内休眠。示例 -

def read():
    import time
    with open("foo.txt", "r") as fo:
        for line in fo:
            print line
            time.sleep(1)
read()

如果你真的想使用threading.Timer(),那么你不需要while循环,你应该将文件对象作为参数传递给函数,例如 -

def read(fo):
    line=fo.readline()
    print line
    if len(line) == 0:
        return
    t = threading.Timer(1.0, read, args=(fo,))
    t.start()
    t.join()

然后最初将函数调用为 -

with open("foo.txt", "r") as fo:
    read(fo)

示例/演示 -

>>> def a(x):
...     if  x >50:
...             return
...     print(x)
...     t = threading.Timer(1.0 , a, args=(x+1,))
...     t.start()
...     t.join()
...
>>> import threading
>>> a(1)
1
2
3
4
5
6
7
8