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

使用Python multiprocessing实现分层相邻数累加的循环逻辑问题

代码调整方案

核心修改逻辑

  • 新增外层循环,循环终止条件为当前计算层的数字数量等于1,此时得到的唯一值就是1到17的累加总和
  • 重构divide_test函数,移除全局变量依赖改为入参传入,适配每层动态变化的输入列表
  • 每次单层级计算完成后,将共享字典的结果按key顺序提取为下一层的输入列表,若当前层长度为奇数,主动追加最后一个未配对元素到新列表末尾

完整可运行代码

import multiprocessing

# 生成初始数字列表1到17
def fill_starting_list():
    return [i for i in range(1, 18)]

# 拆分数字对存入共享字典,修改为接收当前层列表作为入参
def divide_test(current_list, dict):
    index = 0
    # 两两配对存入字典
    for i in range(1, len(current_list), 2):
        dict[index] = [current_list[i-1], current_list[i]]
        index += 1
    # 长度为奇数时追加最后一个元素
    if len(current_list) % 2 == 1:
        dict[index] = current_list[-1]
    return dict

# 数字求和计算函数
def calculate(key, dict):
    val = dict[key]
    if isinstance(val, list):
        dict[key] = sum(val)

if __name__ == '__main__':
    manager = multiprocessing.Manager()
    # 初始层为1到17的列表
    current_level_list = fill_starting_list()
    
    # 循环计算直到只剩一个数字
    while len(current_level_list) > 1:
        dictionary = manager.dict()
        # 拆分当前层的数字对
        divide_test(current_level_list, dictionary)
        # 启动多进程计算
        processes = []
        # 单个元素不需要计算,仅给配对的元素创建进程
        for process_index in range(len(current_level_list) // 2):
            p = multiprocessing.Process(target=calculate, args=(process_index, dictionary))
            p.start()
            processes.append(p)
        # 等待所有进程执行完成
        for p in processes:
            p.join()
        # 按key顺序提取结果作为下一层输入
        current_level_list = [dictionary[k] for k in sorted(dictionary.keys())]
        print(f"当前层计算结果:{current_level_list}")
    
    print(f"最终累加结果:{current_level_list[0]}")

运行验证

运行后会逐层输出每层的计算结果,最终得到1到17的总和为153,和直接求和的结果一致,完全符合层级累加的规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:02