«В реальном времени» (поскольку это очевидно «мягкое» реальное время, если у вас запущено несколько процессов, а не «жесткое» в реальном времени!) Не означает «вы не можете использовать time.sleep
": даже небольшое количество сна сделает вещи немного лучше - попробуйте добавить time.sleep(0.01)
в ваш цикл, просто чтобы дать другим процессам лучший шанс для запуска. Недостаток сна может фактически заставить вас занять больше времени, давая другим процессам очень мало шансов заполнить трубу!
Помимо этого, у @ S.Lott все в порядке: для поведения "в реальном времени" вы должны читать с sys.stdin
(хотя, возможно, это не обязательно должен быть байт за раз, в зависимости от платформы: обычно sys.stdin.read(1024)
будет читать до 1024 байта, когда sys.stdin
- это труба или другое «сырое» в отличие от «приготовленного» FD, возвращая сколько бы байтов было в трубе, если <100, скорее чем ожидание - вы можете установить FD на неблокирующую, чтобы убедиться в этом непосредственно, и выполнять манипуляции со строками (например, соединять строки, вырезать их и т. д.) позже в своем коде. </p>