并行化循环

时间:2018-01-05 14:32:35

标签: python

我正在尝试在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 []

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您正在创建138259 * 9606834项目列表。这对你的记忆来说太过分了。

我建议使用itertools.product()实际上是的生成器(即元素不存储在内存中,但在迭代期间动态创建):

paramlist      = itertools.product(LOAD_GEN_KEYS, ES_DATA_K)

由于pool.map(curate_results, paramlist)接受可迭代,因此生成器应该与列表一样好。