Как я могу распараллелить конвейер генераторов / итераторов в Python?

Предположим, у меня есть некоторый код 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)

Этот код считывает каждую строку из входного файла, запускает ее через несколько функций и записывает вывод в выходной файл. Теперь я знаю, что функции process_line , process_item и generate_output_line никогда не будут мешать друг другу, и давайте предположим, что input и выходные файлы находятся на разных дисках, так что чтение и запись не будут мешать друг другу.

Но Python, вероятно, ничего из этого не знает. Я понимаю, что Python будет читать одну строку, применять каждую функцию по очереди и напиши т результат будет выведен, и тогда он будет читать только вторую строку после , отправив первую строку на выход, так что вторая строка не войдет в конвейер до тех пор, пока первая не завершится. Я правильно понимаю, как будет протекать эта программа? Если это так, то есть ли простой способ сделать так, чтобы в конвейере могло одновременно находиться несколько строк, чтобы программа считывала, записывала и обрабатывала каждый шаг параллельно?

7
задан Ryan C. Thompson 16 April 2011 в 06:49
поделиться