Предположим, у меня есть некоторый код Python, подобный следующему:
input = open("input.txt")
x = (process_line(line) for line in input)
y = (process_item(item) for item in x)
z = (generate_output_line(item) + "\n" for item in y)
output = open("output.txt", "w")
output.writelines(z)
Этот код читает каждую строку из входного файла, пропускает ее через несколько функций и записывает вывод в выходной файл. Теперь I знает, что функции process_line
, process_item
и generate_output_line
никогда не будут мешать друг другу, и давайте предположим, что входные и выходные файлы находятся на отдельных дисках, так что чтение и запись не будут мешать друг другу.
Но, вероятно, Python ничего об этом не знает. Насколько я понимаю, Python будет читать одну строку, применять каждую функцию по очереди и записывать результат в вывод, а затем он будет читать вторую строку только после отправки первой строки на вывод, так что вторая строка не входит в конвейер, пока не выйдет первая. Я правильно понимаю, как эта программа будет течь? Если это так, то есть ли простой способ сделать так, чтобы несколько конвейеров могли быть в конвейере одновременно, чтобы программа считывала, записывала и обрабатывала каждый шаг параллельно?