我正在尝试在python中并行化for循环。我在参数的排列阶段出现内存错误。
我可以看出为什么会失败,但是做同样事情的另一种方法是什么。
import itertools
import multiprocessing
LOAD_GEN_KEYS = range(138259)
ES_DATA_K = range(9606834)
paramlist = list(itertools.product(LOAD_GEN_KEYS, ES_DATA_K))
pool = multiprocessing.Pool()
VALID_TS = pool.map(curate_results, paramlist)
def curate_results(params):
LG = params[0]
ES = params[1]
ES_S = str(int(ES)/1000)
if ES_S == LG:
return [LG, ES]
else:
return []
任何帮助将不胜感激。
答案 0 :(得分:2)
您正在创建138259 * 9606834项目列表。这对你的记忆来说太过分了。
我建议使用itertools.product()
实际上是的生成器(即元素不存储在内存中,但在迭代期间动态创建):
paramlist = itertools.product(LOAD_GEN_KEYS, ES_DATA_K)
由于pool.map(curate_results, paramlist)
接受可迭代,因此生成器应该与列表一样好。