Python生成器在后台计算和存储
我有一个python生成器,它遍历文件列表并逐个处理其中的数据顺序很重要,因为我需要上一个文件的结果来计算下一个文件,所以这不是一个令人尴尬的并行任务。当处理每个文件时,我将数据从生成器中吐出,开始主计算。我想知道是否有可能让生成器在后台运行并“缓存”结果,尽管我对这个主题没有太多经验 我的代码看起来像这样-Python生成器在后台计算和存储,python,python-3.x,multithreading,multiprocessing,generator,Python,Python 3.x,Multithreading,Multiprocessing,Generator,我有一个python生成器,它遍历文件列表并逐个处理其中的数据顺序很重要,因为我需要上一个文件的结果来计算下一个文件,所以这不是一个令人尴尬的并行任务。当处理每个文件时,我将数据从生成器中吐出,开始主计算。我想知道是否有可能让生成器在后台运行并“缓存”结果,尽管我对这个主题没有太多经验 我的代码看起来像这样- for processedData in myGenerator(): bigCalculation(processedData) for processedData in c
for processedData in myGenerator():
bigCalculation(processedData)
for processedData in cleverParallelFunction(myGenerator()):
bigCalculation(processedData)
我在找这样的东西-
for processedData in myGenerator():
bigCalculation(processedData)
for processedData in cleverParallelFunction(myGenerator()):
bigCalculation(processedData)
值得注意的是,processedData的大小合理(几GB),处理时间与从文件读取时间相同。我很好奇多重处理在这里是否有用,因为它通过管道发送数据可能也需要相当长的时间,但我不确定
这里的任何帮助都将不胜感激 “多处理”在这里可能会有所帮助。查看“池”。它的映射方法需要一个iterable,这是你的生成器可以容纳的地方。我不确定pool是否是正确的选择,因为为了计算生成器的下一步,我需要上一步的结果哦,你以前没有说过。它当前看起来像是
myGenerator()
生成了一系列processedData
,需要将其传递到bigcluation()
。您没有说明需要在myGenerator()
中返回bigCalculation()
的结果。为了100%清楚,在生成器的计算中没有使用bigCalculation()
的结果。只是生成器有很多状态,并且依赖于以前的调用来计算下一个方法。我不认为map可以在这种情况下使用,因为它要求它调用的函数基本上是无状态的。是的,它调用的函数只能看到传递的参数,在这种情况下,它是隐式的“processedData”。要映射的另一个参数是一个iterable,您可以使用生成器对其进行映射。也许您需要尝试使用虚拟数据和函数。