使用计时器逐行读取
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
我正在尝试使用 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