У меня есть следующий фрагмент кода для чтения данных из дочернего процесса в виде его сгенерированного и записи в файл.python subprocess pipe небуферизованное поведение
from subprocess import Popen, PIPE proc = Popen('..some_shell_command..', shell=True, stdout=PIPE) fd = open("/tmp/procout", "wb") while True: data = proc.stdout.read(1024) if len(data) == 0: break fd.write(data) fd.close()
По умолчанию bufsize 'Popen' равен 0 => без буферизации. Что произойдет, если по какой-то причине операция записи в файл испытывает огромную задержку?
- Предполагая, что дочерний процесс должен производить 500 ГБ данных, все эти данные сохраняются в памяти до тех пор, пока родитель не прочитает их все? (OR)
- Будет ли дочерний процесс ждать 1024 байта данных, которые должен быть прочитан родителем, прежде чем записывать следующие 1024 байта в stdout? (OR)
- Будет ли процесс дочернего процесса ждать, когда буфер буфера OS заполняется, и как только родитель читает, ребенок снова возобновляет запись? (OR)
- ??