对循环进行并行化时,itertools出现内存错误

2024-06-02 07:58:20 发布

您现在位置: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 []

任何帮助都将不胜感激。你知道吗


Tags: importdataesloadrangeparamskeysmultiprocessing
1条回答
网友
1楼 · 发布于 2024-06-02 07:58:20

您正在创建138259*9606834项的列表。那对你的记忆来说太多了。你知道吗

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

paramlist      = itertools.product(LOAD_GEN_KEYS, ES_DATA_K)

因为pool.map(curate_results, paramlist)接受iterable,所以生成器应该和列表一样好。你知道吗

相关问题 更多 >