Я знаю, что это классическая проблема в потоковой обработке, но я не знаю, как с ней справиться в Python. У меня есть дескриптор файла, который записывается активным процессом. Я хочу потреблять содержимое из этого файлового дескриптора построчно, но я не хочу зайти в тупик, ожидая чтения. Я буду читать до EOF или до 60 секунд циклического чтения, в зависимости от того, что наступит раньше. Совет о том, как это сделать, приветствуется. Описание моего псевдокода этой проблемы приведено ниже.
proc = genprocess("command")
found_a = False
found_b = False
start = time.time()
while True:
line = proc.readline()
while line:
if not found_a and grep(pattern_a, line):
found_a = True
print "Found A, now looking for B"
elif not found_b and grep(pattern_b, line):
found_b = True
print "Found B, all done"
break
if time.time() - start > 60:
break
else:
time.sleep(5)
proc.kill()
Проблема в том, что это читает только одну строку на каждом интервале. Вместо этого я хочу, чтобы внутренняя часть цикла повторялась как можно больше раз, но не блокировала ожидание записи нового содержимого в файл. Как только он прочитает столько, сколько доступно, он должен заснуть на 5 секунд, чтобы позволить накопить больше контента.