You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python2.7 Aarch64环境运行itertools.combinations输出Killed问题求解

问题成因
  • 组合数量级远超可处理范围:你用到的字符集共62个元素,取10个的组合数为C(62,10) ≈ 1.47×10^13,就算每秒生成100万条,也需要400多年才能跑完所有组合,全量生成是不可能完成的任务。
  • 进程被杀死的直接原因:你直接将所有组合打印到终端,终端会缓存所有历史输出内容,短时间内的巨量输出会快速占满系统内存,触发Linux的内存溢出杀手(OOM Killer)主动杀掉进程,就是你看到的Killed提示。
  • 额外风险:你代码里写的rSubset函数非常危险,如果你调用它,会直接把所有组合一次性转为列表再转集合,相当于一次性把超大量数据加载到内存,会瞬间触发OOM,建议直接删除这段无用代码。
分块写入实现方案

可以通过循环搭配break实现你要的按批次生成写入的需求,不需要复杂逻辑,核心思路是内存中只保留当前批次的生成结果,写满一批就刷入磁盘清空缓存,同时可以设置最大生成量,达到阈值直接终止任务。

示例代码如下:

from itertools import combinations

if __name__ == "__main__":
    # 字符集
    char_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    # 密码长度
    pwd_length = 10
    # 每批次写入的条数,可根据内存大小调整,10万条约占1MB内存
    batch_size = 100000
    # 最大生成条数,设为0会一直生成(不建议,全量生成不可能完成)
    max_count = 1000000

    current_batch = []
    total = 0

    with open("passwords.txt", "w", encoding="utf-8") as f:
        for item in combinations(char_set, pwd_length):
            # 把组合转为字符串格式,可根据需求修改拼接规则
            pwd_str = ''.join(map(str, item))
            current_batch.append(pwd_str + "\n")
            total += 1

            # 达到批次大小就写入磁盘,清空缓存
            if len(current_batch) >= batch_size:
                f.writelines(current_batch)
                current_batch = []
                # 仅每批次打印一次进度,避免大量终端输出
                print(f"已生成:{total} 条")

            # 达到最大生成量直接终止,用break实现需求
            if max_count > 0 and total >= max_count:
                break
        
        # 写入最后不足一个批次的剩余内容
        if current_batch:
            f.writelines(current_batch)
    
    print(f"任务完成,共生成 {total} 条密码,已写入 passwords.txt")

注意事项

  • 不要设置过大的batch_size,也不要删除每批次写入的逻辑,否则会导致内存占用持续升高最终被OOM杀死。
  • 务必设置合理的max_count,全量生成所有组合是不可能完成的任务,普通存储设备也装不下这么多数据。
  • 不要每条结果都打印到终端,仅保留批次进度打印即可,避免终端占用过多内存。

内容的提问来源于stack exchange,提问作者ConfusingFool93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:45:02