Я знаю, что это классическая проблема в потоковой обработке, но я не знаю, как справиться с этим в 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 секунд, чтобы накопить больше контента.