【发布时间】:2011-04-16 06:49:26
【问题描述】:
假设我有一些 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永远不会相互干扰,假设输入和输出文件在不同的磁盘上,这样读取和书写不会互相干扰。
但 Python 可能对此一无所知。我的理解是Python会读取一行,依次应用每个函数,并将结果写入输出,然后它只会在将第一行发送到输出之后读取第二行,所以在第一条线退出之前,第二条线不会进入管道。我是否正确理解该程序将如何进行?如果这是它的工作原理,是否有任何简单的方法可以使多行可以同时在管道中,以便程序并行读取、写入和处理每个步骤?
【问题讨论】:
-
我认为你需要为此添加多线程,所以我会说不 - 你在 CPython 和其他实现中没有多线程,它可能不值得拥有一百行而不是五。
标签: python iterator parallel-processing pipeline