使用计时器逐行读取

Read line by line using timer

我正在尝试使用 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()

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

此外,您使用 threading.Timer() 所做的并不是您使用它的方式,threading.Timer() 在 1 秒后在新线程中启动函数 read,一段时间后您将拥有所有线程负载 运行 read() 无限期地运行。

通过使用 time.sleep() 可以很容易地完成您想要做的事情(无需使用 threading.Timer() ),让您的程序休眠特定的秒数。例子-

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)

Example/Demo-

>>> 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