Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python生成器在后台计算和存储_Python_Python 3.x_Multithreading_Multiprocessing_Generator - Fatal编程技术网

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

我有一个python生成器,它遍历文件列表并逐个处理其中的数据顺序很重要,因为我需要上一个文件的结果来计算下一个文件,所以这不是一个令人尴尬的并行任务。当处理每个文件时,我将数据从生成器中吐出,开始主计算。我想知道是否有可能让生成器在后台运行并“缓存”结果,尽管我对这个主题没有太多经验

我的代码看起来像这样-

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,您可以使用生成器对其进行映射。也许您需要尝试使用虚拟数据和函数。