Проблема в том, что вы снова открываете файл, который начинает чтение из первой строки, и вы читаете эту строку, печатаете его и снова продолжаете цикл, что делает цикл бесконечным циклом.
Кроме того, что вы делаете с threading.Timer()
не так, как вы его используете, threading.Timer()
запускает функцию read
в новом потоке через 1 сек, через некоторое время вы бы иметь нагрузок потоков все работает функция 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)
Пример/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
Почему вы каждый раз открываете файл во время цикла? –
Я попытался открыть перед циклом while, и он показывает ту же проблему –
Что вы на самом деле пытаетесь сделать с этим? –