如何优化 itertools.combinations 的内存使用?

问题描述 投票:0回答:1

我想为我丢失的密码字母生成所有可能的组合。

我选择 itertools.combinations 而不是 itertools.products,因为它产生大约 4% 的后者,而且速度很快,但运行后我的代码会因为内存不足而被杀死。

def genb(lst, word_length):
    with concurrent.futures.ThreadPoolExecutor(max_workers=multiprocessing.cpu_count()) as executor:
        comb = ("".join(combination) for combination in itertools.combinations(lst, word_length))
        for future in concurrent.futures.as_completed(executor.submit(combine, comb)):
            result = future.result()
            if result:
                return result
    return False

有没有办法减少上面代码的内存使用? 我有 256GB 的 RAM 和 64 个线程在运行。

multithreading memory memory-management out-of-memory python-itertools
1个回答
0
投票

此内存问题与

combinations()
调用无关,后者仅使用少量固定内存量。

相反,问题是由并发期货实例过多引起的。

一个可能的解决方案是只创建少数期货(每个期货运行一个单独的核心)并提交成批的密码尝试来评估。

© www.soinside.com 2019 - 2024. All rights reserved.