return asyncio.create_subprocess_exec(*_cmd, stdout=asyncio.subprocess.PIPE, limit=2 ** 32, stderr=asyncio.subprocess.PIPE, loop=loop)
Я использую этот код для создания асинхронного подпроцесса, затем получаю сообщение от stdout.
data = await p.stdout.read(n=height * width * 3)
EveryThing хорошо, я читаю из pipe 2k jpg 2 fps by Байт изображенияразмер - 11059200, но максимальный размер при чтении - всегда 8192, поэтому я пытаюсь получить его один раз.
print("start1" + str(arrow.now()))
loop_size = int(height * width * 3 / 8192 + 1)
print(loop_size)
list = [await p.stdout.read(n=height * width * 3) for _ in range(loop_size)]
print("start2" + str(arrow.now()))
data = b"".join(list)
print("end" + str(arrow.now()))
Кажется, все в порядке.
start22018-06-12T19: 44: 30.902742 + 08: 00
end2018-06-12T19: 44: 30.909693 + 08: 00
2018-06-12T19: 44: 30.916675 + 08: 00
Если канал представляет собой большой файл преобразования, процесс не сможет сразу обработать данные, поэтому программа всегда прерывается.
Я хочу знать, почему пакет, полученный из канала, является awlay 8192, Можно ли читать какобычный Subprocess.Pipe.read (bufsize = width * height * 3)?Любое хорошее предложение для этого вопроса?
изображение